我在mysql中有两个表
#messages table :
messageid
messagetitle
.
.
#usersmessages table
usersmessageid
messageid
userid
.
.
现在我想从消息表中删除它没关系。但是当我删除messageid ='1'的消息时,例如它仍然存在于usersmessage上,我必须立即从这两个表中删除;
所以我使用以下查询:
DELTE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ;
然后我测试
DELETE FROM messages , usersmessages
WHERE messages.messageid = usersmessages.messageid
and messageid='1' ;
但是这两个查询并不符合此任务。
答案 0 :(得分:108)
难道你不能用分号分隔它们吗?
Delete from messages where messageid = '1';
Delete from usersmessages where messageid = '1'
或强>
只需使用INNER JOIN
,如下所示
DELETE messages , usersmessages FROM messages INNER JOIN usersmessages
WHERE messages.messageid= usersmessages.messageid and messages.messageid = '1'
答案 1 :(得分:38)
DELETE a.*, b.*
FROM messages a
LEFT JOIN usersmessages b
ON b.messageid = a.messageid
WHERE a.messageid = 1
翻译:从表消息中删除,其中messageid = 1,如果表 uersmessages 有表消息的messageid = messageid,则删除该行 uersmessages 表。
答案 2 :(得分:11)
您应该使用FOREIGN KEY
创建ON DELETE CASCADE
:
ALTER TABLE usersmessages
ADD CONSTRAINT fk_usermessages_messageid
FOREIGN KEY (messageid)
REFERENCES messages (messageid)
ON DELETE CASCADE
,或者在事务中使用两个查询来执行此操作:
START TRANSACTION;;
DELETE
FROM usermessages
WHERE messageid = 1
DELETE
FROM messages
WHERE messageid = 1;
COMMIT;
但事务仅影响InnoDB
个表。
答案 3 :(得分:7)
您有两种选择:
首先,在事务中执行两个语句:
BEGIN;
DELETE FROM messages WHERE messageid = 1;
DELETE FROM usermessages WHERE messageid = 1;
COMMIT;
或者,您可以使用外键设置ON DELETE CASCADE。这是更好的方法。
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT, parent_id INT,
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
);
您可以阅读有关ON DELETE CASCADE here的更多信息。
答案 4 :(得分:6)
DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1'
答案 5 :(得分:4)
不需要JOINS:
DELETE m, um FROM messages m, usersmessages um
WHERE m.messageid = 1
AND m.messageid = um.messageid
答案 6 :(得分:1)
请试试这个
DELETE FROM messages,usersmessages
USING messages
INNER JOIN usermessages on (messages.messageid = usersmessages.messageid)
WHERE messages.messsageid='1'
答案 7 :(得分:0)
试试这个..
DELETE a.*, b.*
FROM table1 as a, table2 as b
WHERE a.id=[Your value here] and b.id=[Your value here]
我将id
作为示例列。
很高兴这有帮助。 :)
答案 8 :(得分:0)
您也可以使用这样的方法,当两列具有2个或多个相同列名的列时删除特定值。
DELETE project , create_test FROM project INNER JOIN create_test
WHERE project.project_name='Trail' and create_test.project_name ='Trail' and project.uid= create_test.uid = '1';
答案 9 :(得分:0)
从table1
t1左联接table2
t2在t1上删除t1,t2。id
= t2。id
在t1.id = some_id
答案 10 :(得分:0)
这里没有提到另一种方法(我还没有完全测试它的性能),您可以为所有表设置数组->要删除的行,如下所示
// set your tables array
$array = ['table1', 'table2', 'table3'];
// loop through each table
for($i = 0; $i < count($array); $i++){
// get each single array
$single_array = $array[$i];
// build your query
$query = "DELETE FROM $single_array WHERE id = 'id'";
// prepare the query and get the connection
$data = con::GetCon()->prepare($query);
// execute the action
$data->execute();
}
然后您可以将用户重定向到主页。
header('LOCATION:' . $home_page);
希望这会帮助某人:)
谢谢