【发布时间】:2015-01-26 04:02:26
【问题描述】:
我的网站上有一个评论系统,用户(个人资料)可以在其中为其他人留下评论。这部分工作正常。
但在我的主页上,我想获得 10 条最新评论,但我不想复制任何用户/个人资料(即,如果用户有 2 条评论,我只想要最新的)
添加 DISTINCT 不会这样做,因为所有评论/行都是唯一的。 (我确实添加了 DISTINCT,尽管有些用户提交了重复的评论......)
我尝试了 GROUP BY ProfileID 但这并不一定会返回最近的评论,我不知道该怎么做。 (GROUP BY 具有预期的效果,但我认为可能会混淆数据并且没有按日期顺序获得结果)
以下(简化的)SQL 是我目前拥有的,但这会为每个用户带来超过 1 条评论(如果他们有超过 1 条)
SELECT DISTINCT LEFT(r.ReviewText, 100) as Review, r.ReviewRating, r.ReviewDate,
p.ProfileName, p.Location, p.ProfileID,
((date_format(now(),'%Y') - date_format(p.DateOfBirth,'%Y')) - (date_format(now(),'00-%m-%d') < date_format(p.DateOfBirth,'00-%m-%d'))) AS Age
FROM tReview r
INNER JOIN tProfiles p ON p.ProfileID = r.tProfiles_ProfileID
WHERE r.ReviewWithdrawn = 0
AND r.ReviewEnabled = 1
AND p.Enabled = 1
ORDER BY r.ReviewDate DESC
LIMIT 10
关于我如何按日期顺序检索 10 个结果但仅包括每个用户一次的任何想法(没有在 php 中过滤)?
【问题讨论】:
-
你已经看到这个 SO 帖子了吗? stackoverflow.com/questions/6841605/get-top-1-row-of-each-group
-
@RandykaYudhistira 谢谢,听起来就像我需要的一样,尽管他们解释得比我好。再次感谢!
-
@RandykaYudhistira 谢谢,但我找不到任何适合我的方法:-(
标签: php mysql group-by sql-order-by