我正在开发一个论坛系统,我需要删除特定论坛中的所有主题和帖子。
有一张posts
桌子可以容纳所有帖子。每个帖子都有一个topic_id
字段,它是它所属主题的 ID。主题驻留在topics
表中,每个主题都有forum_id
字段,该字段是其所属论坛的 ID。
所以现在当我决定删除带有 ID 的论坛时1
,我将如何从这个论坛中删除所有主题和帖子?
我正在开发一个论坛系统,我需要删除特定论坛中的所有主题和帖子。
有一张posts
桌子可以容纳所有帖子。每个帖子都有一个topic_id
字段,它是它所属主题的 ID。主题驻留在topics
表中,每个主题都有forum_id
字段,该字段是其所属论坛的 ID。
所以现在当我决定删除带有 ID 的论坛时1
,我将如何从这个论坛中删除所有主题和帖子?
首先,我建议您仔细查看您的数据结构:如果您使用外键约束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]
应该做的伎俩。
请理解,我不建议这样做。使用数据一致性工具实现数据一致性。
此 sql 应删除与论坛 1 相关的所有帖子。主题仍将在数据库中,并且必须另外删除。没有测试过sql,试试吧:)
DELETE FROM
posts
WHERE
topic_id
IN (
SELECT
topic_id
FROM
topics
WHERE
forum_id = 1
)