使用join语句从两个表中删除,但是有错误

时间:2014-04-12 15:18:31

标签: php mysql codeigniter

我想删除content表中的文章,然后同时删除comments表中与删除的这些文章相关的评论。

我创建了以下查询:

$sql = "DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE content.delete_time < UNIX_TIMESTAMP()";
$this->db->query($sql);

但我有这个错误:

Error Number: 1064
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 'JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMES' at line 1

DELETE FROM content JOIN comments ON content.id = comments.content_id WHERE delete_time < UNIX_TIMESTAMP()

上一个查询有什么问题?

2 个答案:

答案 0 :(得分:2)

最好的建议是将SQL FK从(删除无操作时)更新到(删除级联时),这将删除SQL DB上的所有相关行:

从tblContent删除 在哪里ArticleID =&#39; givenArticleID&#39;;

这将处理数据库中的所有相关行。

另一种方法是首先删除相关的然后删除父亲。

答案 1 :(得分:0)

您没有为联接删除查询使用正确的语法

DELETE content.*,comments.*
 FROM content 
INNER JOIN comments ON content.id = comments.content_id 
WHERE content.delete_time < UNIX_TIMESTAMP()

通过这种方式,您可以删除内容表中的行以及与delete_time小于UNIX_TIMESTAMP()的每个内容相关的行,但请确保首先测试对演示数据的查询而不是直接测试生产数据