我想知道是否有人可以帮助我。
我有数百人将图片上传到我的网站,基本上每个上传在数据库中都有自己的行,包括创建的数据,用户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
答案 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版本更清晰。