gpt4 book ai didi

php - 选择包含 Join 和 Count 的行

转载 作者:行者123 更新时间:2023-11-29 13:36:01 25 4
gpt4 key购买 nike

我正在使用 php 和 mysql 构建一个简单的问题/回复系统。
我想要做的是显示所有问题,及其回复计数和最后回复的时间戳。
这是我的表的结构:

Table 'Discussion':  
id | title | description | user_id | timestamp
--------------------------------------------------------------------------------
Table 'Reply':
id | reply_text | user_id | discussion_id | timestamp

我现在正在做的是选择讨论并获取回复计数,如下所示:

SELECT 
d.*,
count(dr.id) AS replies_count
FROM discussion d
LEFT JOIN discussion_reply dr ON d.id = dr.discussion_id
GROUP BY d.id

这会返回类似 id | 的行标题 |描述 |用户 ID |时间戳|回复计数

然后(通过 PHP)我循环结果并查询数据库以获取每个讨论的最新(最大)时间戳的回复。
因此,对于第一个查询返回的每一行,都会创建一个新查询。

有没有一种方法可以通过执行一个查询来获取我需要的所有信息?
就像修改我的初始查询以便它返回:

id | title | description | user_id | timestamp | replies_count | latest_reply_timestamp

提前谢谢

最佳答案

下面的声明将为您提供每次讨论的最新回复。

SELECT  a.id, a.title, a.description, a.user_id, a.timestamp,
b.id ReplyID, b.reply_text, b.user_id, b.discussion_id,
b.timestamp ReplyTimestamp,
COALESCE(c.totalReplies, 0) TotalReplyCount

FROM Discussion a
LEFT JOIN
(
SELECT a.*
FROM Reply a
INNER JOIN
(
SELECT discussion_id, MAX(timestamp) timestamp
FROM Reply
GROUP BY discussion_id
) b ON a.discussion_id = b.discussion_id AND
a.timestamp = b.timestamp
) b ON a.discussion_id = b.discussion_id
LEFT JOIN
(
SELECT discussion_id, COUNT(*) totalReplies
FROM Reply
GROUP BY discussion_id
) c ON a.discussion_id = c.discussion_id

关于php - 选择包含 Join 和 Count 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com