我正在使用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 |标题|描述| user_id |时间戳| replies_count | latest_reply_timestamp
提前谢谢
答案 0 :(得分: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