1

我希望我的董事会按照新线程显示在顶部的顺序对线程进行排序,直到创建另一个新线程或在另一个线程中做出回复。如果发生这种情况,线程将从 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;
4

1 回答 1

2

greatest如果任何参数为 null => 我建议使用合并,如果您关心新线程和新回复,但不关心原始线程的更新,则将返回 null :

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


如果您也关心更新(所以 b.date 可以大于 max(r.date)):

order by greatest(b.date, coalesce(MAX(r.date), b.date))
于 2012-05-18T22:43:24.663 回答