我有一张名为photos
的桌子,上面有成千上万的用户上传照片。
每个用户显然可以上传多张照片。
表架构是:
id,
user_id,
photo,
date_created
我只想获取每个user_id发布的最新记录..
我试过了:
SELECT * FROM photos
GROUP BY user_id
ORDER BY date_created desc LIMIT 300
但这显然会带来许多奇怪的结果。
这似乎是一个简单的查询,但我已经花了数小时研究堆栈溢出和在Google上阅读这么多不同的文章,我不能为我的生活找出这个简单的查询。 / p>
答案 0 :(得分:1)
这应该为您提供每个用户的最新行:
SELECT p.user_id, photo, date_created FROM photos p
JOIN (
SELECT user_id, MAX(date_created) max_date FROM photos GROUP BY user_id
) max_dates ON p.user_id = max_dates.user_id AND p.date_created = max_dates.max_date
答案 1 :(得分:0)
select p1.user_id, p1.photo, p1.date_created
from photos p1 left join photos p2
on p1.id < p2.id and p1.user_id = p2.user_id
where p2.id is null
试试
修改强> 忘了桌子名字,我的不好。将它添加进来。也是,这里有一个小提琴:http://sqlfiddle.com/#!9/a72f6/3
答案 2 :(得分:0)
检查一下。我使用HAVING MAX(date_created)
来检索当前创建/上传的记录。
SELECT user_id
FROM photos
GROUP BY user_id
HAVING MAX(date_created)
ORDER BY date_created DESC LIMIT 300
答案 3 :(得分:0)
我相信你想要的是摆脱那个GROUP BY并使用常规&#39; WHERE user_id =&#39;某些东西&#39;,其余的都是正确的。
我尝试过像你这样的查询,结果只有一个记录,每个&#39; user_id&#39;,比方说。 GROUP BY通常在句子中使用WHERE ......
http://www.w3schools.com/sql/sql_groupby.asp
我希望有帮助:)如果您收到错误,请发布。