0

我有一张这样的表(简化)

table t
PostID --- 用户 ID --- 长度

PostID 是唯一的,但 Userid 不是。一个用户可以发布多个帖子。
现在我想创建一个最长帖子的排名列表,并这样做:

SELECT DISTINCT(Userid), PostID FROM table t ORDER BY `Length` desc LIMIT 10

但这也给了我这样的结果:
PostID--- Userid--- Length
1 --- 100 --- 3,203
15 --- 942 --- 3,194
45 --- 100 --- 2,093

因此,一个用户发布了两个可以排名的帖子。但我想我用 DISTINCT 子句避免了那些重复?
我究竟做错了什么?

4

2 回答 2

1

从逻辑上讲,您真的不想做 DISTINCT,因为您只是想按最长的帖子订购。

您真的不想获得最长的帖子,有时同一用户会多次出现在列表中吗?

SELECT Userid, PostID FROM table t ORDER BY `Length` desc LIMIT 10

您的 distinct 不起作用的原因是您还返回 PostID。如果您删除 PostID,那么您将获得一个不同的 UserID。

要执行我认为您想要的操作,您需要执行此处提到的子查询。

于 2013-09-02T01:09:22.727 回答
0

DISTINCT正在从结果中消除重复的行。Userid 为 100 的两行不重复,因为其他列中的值不同。

于 2013-09-02T01:10:12.033 回答