我正在研究论坛系统,我需要删除特定论坛的所有主题和帖子。
有一个posts
表,其中包含所有帖子。每个帖子都有topic_id
字段,该字段是其所属主题的ID。主题位于topics
表中,每个主题都有forum_id
字段,该字段是其所属论坛的ID。
所以现在当我决定删除ID为1
的论坛时,我该如何删除此论坛中的所有主题和帖子?
答案 0 :(得分:3)
首先,我建议您仔细查看您的数据结构:如果您使用ON DELETE CASCADE
风格的外键约束,您的子删除将自动为您完成 - 这只是其中一个你得到的好处。
如果由于某些原因您不能或不想使用此类限制,请首先查看如何选择相关主题和帖子。这应该会给你一个很好的开始。
在您的特定示例中,如
DELETE FROM posts
WHERE topic_id IN (
SELECT id FROM topics WHERE forum_id=[id-to-delete]
)
然后
DELETE FROM topics WHERE forum_id=[id-to-delete]
应该这样做。
请理解,我不建议这样做。使用数据一致性工具实现数据一致性。
答案 1 :(得分:0)
此sql应删除与论坛相关的所有帖子1.主题仍将在数据库中,并且必须另外删除。 还没有测试过sql,试试吧:)
DELETE FROM
posts
WHERE
topic_id
IN (
SELECT
topic_id
FROM
topics
WHERE
forum_id = 1
)