我有一个名为的表: 的 thread_comment
现在桌子正在填写如下:
thread_comment_id thread_id user_id thread_comment thread_comment_time
1 2 1 This is a comment 2016-09-14 15:30:28
2 4 1 This is a comment 2016-09-14 15:32:28
3 2 1 This is a comment 2016-09-14 15:33:28
4 5 1 This is a comment 2016-09-14 15:34:28
5 7 1 This is a comment 2016-09-14 15:35:28
6 2 1 This is a comment 2016-09-14 15:37:28
7 2 1 This is a comment 2016-09-14 15:40:28
我想向我的页面显示最新的主题。例如:
作为头号我想要thread_comment_id 7 作为第二,我想要thread_comment_id 5
我跳过 6 ,因为我不希望列表中有任何重复项。
为了做到这一点,我做了下面的事情:
$sql = "SELECT DISTINCT thread_id FROM thread_comment ORDER BY thread_comment_time DESC"
这是有效的(没有显示任何重复)。然而,订单没有任何意义......
例如:
它像5 - 6 -4 - 7等...
答案 0 :(得分:1)
ORDER BY
中未指定DISTINCT
中使用的列。您需要使用汇总功能和GROUP BY
才能使DISTINCT
正常工作。
SELECT DISTINCT thread_id, max(thread_comment_id) FROM thread_comment GROUP BY thread_id ORDER BY max(thread_comment_id) DESC, thread_id
编辑:添加聚合函数max()
另外,ORDER BY
答案 1 :(得分:0)
我理解正确,你想要每个线程一行。这是一种方法:
select tc.*
from thread_comment tc
where tc.thread_date = (select max(tc2.thread_date)
from thread_comment tc2
where tc2.thread_id = tc.thread_id
);