按日期排序回复和新主题

时间:2012-05-18 22:30:21

标签: php mysql sql sorting

我希望我的主板按照新线程显示在顶部的顺序对线程进行排序,直到创建另一个新线程或在另一个线程中进行了回复。如果发生这种情况,线程将从1下降到2,依此类推。

然而,我现在使用的代码只是这样做:如果创建了一个新线程,它将显示在底部,但是如果你做出回复,它将会显示在顶部。因此,需要修复的只是让它显示在顶部创建的最新线程。

    SELECT b.id, b.name, b.subject, b.maintext, b.ip, b.date, b.img, b.replycount, MAX(r.date)
FROM 
    board b
    LEFT JOIN reply r ON r.id = b.id

GROUP BY b.id, b.date
ORDER BY GREATEST(b.date, MAX(r.date)) DESC
LIMIT 50;

1 个答案:

答案 0 :(得分:2)

greatest return null如果任何参数为null =>我建议使用coalesce,如果你关心新的线程和新的回复,但不是关于原始线程的更新:

order by coalesce(MAX(r.date), b.date)

<小时/> 如果你也关心更新(所以b.date可能大于max(r.date)):

order by greatest(b.date, coalesce(MAX(r.date), b.date))