复杂的SQL语句论坛主题列表

时间:2014-11-09 21:37:01

标签: sql

我已经尝试了几个小时而没有运气,想知道是否有一位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

这不是我想要的,有什么建议吗?

1 个答案:

答案 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