使用一个语句从多​​个表中删除多个mysql行

时间:2013-12-19 20:23:07

标签: php mysql sql

我能找到的只有Joins和Inner Joins的答案,

$sql= "DELETE FROM `Item` WHERE `ItemID`='$_POST[id]';
       DELETE FROM `Info` WHERE `Item_ItemID`='$_POST[id]';
   DELETE FROM `ListPics` WHERE `Item_ItemID`='$_POST[id]';";

这给了我一个错误。

Error: You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'DELETE FROM `Info` WHERE 
`Item_ItemID`='1'; DELETE FROM `ListPics` WHERE `I' at line 2

我真的不明白连接是如何工作的,我甚至不确定它们是否适用我真的只是想从3个表中删除3行并带有一个参数。

5 个答案:

答案 0 :(得分:1)

您不能通过PHP一次删除多个表。 PHP一次只能运行一个语句,并且不能通过连接进行删除。

答案 1 :(得分:1)

您必须设计Item表,以便在删除记录时删除所有记录。

然后,只有这样,你才能使用:

$sql= "DELETE FROM `Item` WHERE `ItemID`='$_POST[id]';

这完全取决于你的桌子是如何设计的,但你可以找到一些信息here

答案 2 :(得分:1)

您可以使用mysqli_multi_query运行多个查询;你可以将它们作为以分号分隔的列表传递:

$sql= "DELETE FROM `ListPics` WHERE `Item_ItemID`='$_POST[id]';
       DELETE FROM `Info` WHERE `Item_ItemID`='$_POST[id]';
       DELETE FROM `Item` WHERE `ItemID`='$_POST[id]';";

mysqli_multi_query($dbConn, $sql)

我换了删除的顺序。由于ListPics and Info have a foreign key in them refering to Item`,您需要先删除它们,否则您将收到有关违反外键约束的错误。

请注意,您也可以使用数据库中的ON DELETE CASCADE执行此操作 - 使用该功能时,从Item删除某些内容时,也会删除任何引用ItemID作为外键的内容。感谢Leonardo提供的信息链接。

答案 3 :(得分:0)

您必须使用正确的分隔符来分隔命令。在这种情况下,您似乎正在使用';' 。 请确保这是预期的语句分隔符。您也可以在会话中更改分隔符。 并且一如既往地在命令行会话中尝试命令集,以确保在程序中烘焙它之前语法正确。

答案 4 :(得分:0)

您应该使用ON DELETE CASCADE