2010-10-19 67 views
1

您好我是PHP新手& MySQL和我想知道如何從下面的這兩個表中刪除所有user_id 3記錄使用PHP & MySQL?PHP&MySQL - 如何從兩個表中刪除用戶記錄

我的MySQL表

CREATE TABLE ls (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
skill VARCHAR(255) DEFAULT NULL, 
experience VARCHAR(22) DEFAULT NULL, 
self_grade VARCHAR(10) DEFAULT NULL, 
date_created DATETIME NOT NULL, 
date_updated DATETIME DEFAULT NULL, 
PRIMARY KEY (id) 
); 


CREATE TABLE us (
id INT(13) UNSIGNED NOT NULL AUTO_INCREMENT, 
skill_id INT(13) UNSIGNED NOT NULL, 
user_id INT(13) UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

我們的表值

id skill_id user_id 
9 7   3 
10 8   3 
11 9   3 
12 10   3 
13 17   6 

LS表值

id skill experience  self_grade date_created   date_updated 
7 html 5 years   A   2010-10-19 07:11:08  2010-10-19 07:12:06 
8 jquery 10 years  B   2010-10-19 07:11:27  2010-10-19 07:12:06 
9 css  1 year   NULL  2010-10-19 07:11:38  2010-10-19 07:12:06 
10 php  2 years   C   2010-10-19 07:13:05  NULL 
17 php  2 years   C   2010-10-19 07:19:05  NULL 
+0

真的嗎?你從來沒有考慮過使用一對'DELETE'語句? – Tarka 2010-10-19 15:49:34

+0

@Slokun說真的,你爲什麼不認真地留下無益的評論? – HELP 2010-10-19 15:51:52

+0

@noob,因爲這似乎是你可以用簡單的谷歌搜索「MySQL刪除兩張表」來解決你自己的問題 – Tarka 2010-10-19 16:01:02

回答

1

是的,你可以使用多表DELETE語句,例如。

DELETE FROM ls, us USING ls 
    JOIN us ON us.skill_id = ls.id 
WHERE ls.user_id = 3 
2

你可以獲取屬於user_id = 3所有行再建一個DELETE語句生成WHERE條款。

但是,我想知道你是否有不適當的表格設計,因爲你在用戶和技能之間有一個m:n關係,並且你想刪除id爲3的用戶所關聯的所有技能。但這意味着用戶和技能之間有1:m的關係(1個用戶具有多種技能,不能與其他人分享技能)。或者,也許我有什麼問題......?

+1

我的桌子怎麼不合適?用戶不分享技能。 – HELP 2010-10-19 15:56:22

+0

對不起,如果我有什麼問題。但是你有一個關聯用戶和技能的「連接」表(我們)。這牽涉到用戶和技能之間的m:n關係,這意味着許多用戶可能具有相同的技能(當然,反之亦然)。但是,正如我認爲的那樣,您確認了,您希望在用戶和技能之間具有1:m的關係:一個用戶可能擁有多種技能;每個技能都屬於一個且只有一個用戶。所以,我只需要2個表而不是3個。用戶表和技能表持有一個外鍵user_id。 – Flinsch 2010-10-19 16:19:48

1

的MySQL不支持多表刪除,使用:

DELETE a, b 
    FROM ls a 
    JOIN us b ON b.skill_id = a.id 
WHERE b.user_id = 3