我已经尝试了几个小时而没有运气,想知道是否有一位SQL专家可以让我摆脱困境。
该声明适用于主要论坛页面,其中列出了上次发布的所有主题。我有两个表FORUM_TOPICS和FORUM_REPLIES
FORUM_TOPICS有字段ID,名称,日期 FORUM_REPLIES有id,topic_id,name,date,del
这是我到目前为止所做的,有些行是伪代码。我遇到了问题,因为我试图按照forum_replies中的最后日期订购整个forum_topics列表。希望你能得到我想做的事情;
SELECT ft.*, fr.date as lastpost_date
FROM forum_topics ft
LEFT JOIN forum_replies fr ON fr.topic_id=ft.id
WHERE (fr.del=0 or fr.account_id=5) <-- need these conditions
ORDER BY fr.date DESC
LIMIT 20
这不是我想要的,有什么建议吗?
答案 0 :(得分:1)
使用子选择来获取给定主题中的最新活动:
SELECT ft.*, fr.lastpost_date
FROM forum_topics ft
INNER JOIN (
SELECT
fr.topic_id,
MAX(fr.date) AS lastpost_date
FROM forum_replies fr
WHERE (fr.del = 0 OR fr.account_id = 5)
GROUP BY fr.topic_id
) fr ON fr.topic_id = ft.id
ORDER BY fr.lastpost_date
LIMIT 20
子查询过滤普通用户已删除和发送的帖子,并列出每个主题的最新日期。为了仅列出具有回复的主题,将联接类型设置为INNER
。