0

我正在使用 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 | title | description | user_id | timestamp | replies_count

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

有没有办法通过执行一个查询来获取我需要的所有信息?
就像修改我的初始查询,使其返回:

编号 | 标题 | 描述 | 用户 ID | 时间戳 | 回复数 | latest_reply_timestamp

先感谢您

4

1 回答 1

1

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

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
于 2013-09-11T13:52:10.223 回答