-1

我正在开发一个论坛系统,我需要删除特定论坛中的所有主题和帖子。

有一张posts桌子可以容纳所有帖子。每个帖子都有一个topic_id字段,它是它所属主题的 ID。主题驻留在topics表中,每个主题都有forum_id字段,该字段是其所属论坛的 ID。

所以现在当我决定删除带有 ID 的论坛时1,我将如何从这个论坛中删除所有主题和帖子?

4

2 回答 2

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]

应该做的伎俩。

请理解,我不建议这样做。使用数据一致性工具实现数据一致性。

于 2012-12-16T18:34:56.380 回答
0

此 sql 应删除与论坛 1 相关的所有帖子。主题仍将在数据库中,并且必须另外删除。没有测试过sql,试试吧:)

DELETE FROM
    posts
WHERE 
    topic_id
IN (
    SELECT 
        topic_id
    FROM
        topics
    WHERE
        forum_id = 1
)
于 2012-12-16T18:30:52.680 回答