Php 选择合并联接的行(&A);计数

Php 选择合并联接的行(&A);计数,php,mysql,sql,Php,Mysql,Sql,我正在使用php和mysql构建一个简单的问答系统。 我要做的是显示所有问题,其中包括他们的答复计数和最后一次答复的时间戳。 以下是我的表格结构: Table 'Discussion': id | title | description | user_id | timestamp -------------------------------------------------------------------------------- Table 'Reply': id | repl

我正在使用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 | u id | timestamp | responses | u count

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

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

id |标题|描述|用户id |时间戳|回复|计数| 最新回复时间戳


提前感谢

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

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

谢谢回复@491243。首先想到的是,这似乎并没有回应任何讨论。它也不计算回复数量,但我认为这可以解决。非常感谢,我现在正在查看:)这就是@491243。。。工作就像一个魅力:)最后一个问题,这似乎有点“沉重”的性能思考。我认为这比我过去所做的(循环讨论并查询每个讨论的数据库)更值得花费开销,对吗?如果在表上设置了适当的索引,就不需要考虑性能
:)
但我更喜欢这种方式,而不是每次都对DB进行查询,因为DB连接成本很高。