我已经尝试了十几种不同的方法来解决这个问题,我尝试的一切都打破了我的查询...我有以下代码用于在留言板上生成一个线程循环:< / p>
SELECT MB_TOPICS.*, MAX(MB_REPLIES.TIMESTAMP) AS LATEST
FROM MB_TOPICS
LEFT JOIN MB_REPLIES
ON MB_TOPICS.TOPIC_ID = MB_REPLIES.TOPIC_ID
WHERE MB_TOPICS.CATEGORY_ID='$CATEGORY'
GROUP BY MB_TOPICS.TOPIC_ID
ORDER BY MB_TOPICS.STICKY DESC, LATEST DESC, MB_TOPICS.TIMESTAMP DESC
LIMIT $start,$limit";
这基本上是拉动了该类别中的所有主题,然后通过连接,它还从回复表中获取最近回复的时间戳(如果有的话)。
在排序上,我想将最近活动的线程保持在最顶层...当前(在粘贴Y / N之后)它按最近的回复排序,然后按创建线程时的时间戳排序...这是错误的,因为这意味着在带有回复的旧线程之后会出现一个新线程。我尝试过像
这样的事情GREATEST(LATEST, MB_TOPICS.TIMESTAMP)
或使用IIF语句,ORDER BY中的CASE语句等,但我所做的只是打破查询,以便不显示任何结果。我只是想这样做,以便无论哪个时间戳是最近的(最后一个回复或主题创建),它都会对该最大值进行降序排序。我知道这一定很简单,但它今天杀了我。谢谢!
编辑:如果这里有用的信息......最新&#39;对于没有回复的线程,列将为null
答案 0 :(得分:1)
"SELECT MB_TOPICS.*, MAX(MB_REPLIES.TIMESTAMP) AS LATEST,
GREATEST(COALESCE(MAX(MB_REPLIES.TIMESTAMP),0), MB_TOPICS.TIMESTAMP) AS SORT_ORDER
FROM MB_TOPICS
LEFT JOIN MB_REPLIES ON MB_TOPICS.TOPIC_ID = MB_REPLIES.TOPIC_ID
WHERE MB_TOPICS.CATEGORY_ID='$CATEGORY'
GROUP BY MB_TOPICS.TOPIC_ID
ORDER BY MB_TOPICS.STICKY DESC, SORT_ORDER DESC
LIMIT $start,$limit";
谢谢,如果没有这里的讨论,我就不会到那里。