gpt4 book ai didi

Mysql论坛-获取回复数

转载 作者:行者123 更新时间:2023-11-29 07:48:07 27 4
gpt4 key购买 nike

我正在创建一个非常简单的论坛,其中包含一个名为forum_posts 的表。我将回复和帖子都存储在同一个表中,因为我发现这对于我之前制作的评论系统非常有效。

如果帖子是回复,则它有一个reply_id,即它正在回复的帖子的post_id。如果它是一个“根帖子”,那么它的reply_id 就是0。

我已经有浏览量了。但我想获取结果中每条记录的回复数。

我该怎么做?

SELECT a.account_id, a.store_name, p.post_id, p.post_title, p.post_text, p.views, p.creation_timestamp, p.update_timestamp
FROM forum_posts AS p
INNER JOIN accounts AS a
ON p.account_id = a.account_id
WHERE p.reply_id > 0

正如您可能猜到的那样,我正在制作论坛列表,人们可以在其中选择要查看的论坛帖子。

最佳答案

您需要将帖子加入到自身中并对其进行计数以获得回复数。对于数百万个论坛帖子来说,这并不是特别有效 - 大多数论坛都会对其进行非规范化并单独维护帖子计数属性。

但是,根据您所拥有的,类似(未经测试)...

SELECT a.account_id, a.store_name, cp.* FROM
(
SELECT p.post_id, p.post_title, p.post_text, p.views, p.creation_timestamp,
p.update_timestamp, p.account_id, (COUNT(*) - 1) as replies
FROM forum_posts AS p
LEFT JOIN forum_posts AS p1 ON p1.reply_id > 0 AND p1.reply_id = p.post_id
GROUP BY p.post_id
)
AS cp
INNER JOIN accounts AS a ON cp.account_id = a.account_id
WHERE cp.replies > 0

结尾的WHERE是可选的。我刚刚从您的第一个查询中复制了它。还值得注意的是,这是 MySQL 特有的,因为它使用 GROUP BY ,而没有非聚合列的完整列表(但您将问题标记为 MySQL,所以没问题)。

关于Mysql论坛-获取回复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179019/

27 4 0