从同一个表中的new tol old中选择Distinct

时间:2016-09-14 13:51:46

标签: php mysql

我有一个名为的表: 的 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等...

2 个答案:

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

中的thread_id不是必需的

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