MySQL Query - 选择distinct显示错误的结果

时间:2012-03-09 10:23:42

标签: php mysql

我想知道是否有人可以帮助我。

我有数百人将图片上传到我的网站,基本上每个上传在数据库中都有自己的行,包括创建的数据,用户ID,图片名称等等。

我想要做的是显示最后3个用户上传图片的问题是,如果用户上传更多图片,则另一行添加到具有该用户ID的数据库中,这样我就可以显示最后3行。< / p>

我有以下声明,但它似乎没有正常工作

SELECT DISTINCT * FROM kicks GROUP BY uid ORDER BY created DESC LIMIT 3

我想知道是否有人可以指出我哪里出错了。

干杯

抱歉,我应该添加样本数据,确定

id | uid |创建|

195 | 33 | 2012-03-06 12:32:54
196 | 33 | 2012-03-06 12:35:23
197 | 34 | 2012-03-06 13:09:31
198 | 19 | 2012-03-08 10:37:21
199 | 33 | 2012-03-09 21:04:04

4 个答案:

答案 0 :(得分:3)

SELECT DISTINCT uid FROM kicks ORDER BY created DESC LIMIT 3就是你想要的。

答案 1 :(得分:0)

试试这个:

SELECT * FROM kicks WHERE uid IN (
    SELECT DISTINCT uid FROM kicks ORDER BY created DESC
) LIMIT 3

或者如果 id 列是auto_incremented,请尝试按顺序排序:

SELECT * FROM kicks WHERE uid IN (
    SELECT DISTINCT uid FROM kicks ORDER BY id DESC
) LIMIT 3

答案 2 :(得分:0)

数据库具有唯一的ID字段,因此新行将具有新的唯一ID,这意味着DISTINCT是冗余的,因为如果您使用SELECT *,则每个字段都是不同的。

为什么不尝试类似

的内容
SELECT DISTINCT uid FROM kicks 
ORDER BY created 
DESC LIMIT 3

就像我说的,使用*表示每个字段都是不同的。

e:您可能需要提供有关数据库结构的更多信息,这将有助于了解如何选择字段。

答案 3 :(得分:0)

您的查询确实没问题。唯一的问题是,当您按用户分组时,您需要使用MAX()等函数输出用户个人最大的上传时间。我得到它与你的类似数据。

尝试以下行:

SELECT uid, MAX(created) as latest FROM kicks GROUP BY uid ORDER BY created DESC LIMIT 3

这会将“最新”列添加到您的查询结果中:)

如果您出于某种原因需要,我的版本将允许您显示行唯一ID,但我认为如果不需要,可接受的DISTINCT版本更清晰。