2010-10-19 65 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