从表中选择每个user_id不同的所有列

时间:2013-03-22 20:05:25

标签: php mysql sql

我正在创建一个活动Feed,显示我的用户活动,该活动仅限于最后5行。

SELECT * FROM activity ORDER BY date desc LIMIT 5

问题是我不希望活动源在任何时候都被同一个用户混乱,所以我想检索最后5个结果,其中user_id彼此不同。

我怎么能这样做?

5 个答案:

答案 0 :(得分:1)

这应该有效:

SELECT user_id, MAX(date) FROM activity GROUP BY user_id ORDER BY date DESC LIMIT 5

答案 1 :(得分:1)

如果每个用户没有多个max(date),您可以使用:

SELECT *
FROM   activity
WHERE  (user_id, `date`) IN (
  SELECT * FROM (
    SELECT   user_id, max(`date`)
    FROM     activity
    GROUP BY user_id
    ORDER BY max(`date`) DESC
    LIMIT 5) s
  )
ORDER BY `date` DESC

请参阅小提琴here

答案 2 :(得分:0)

我认为使用像

这样的查询会很容易
SELECT DISTINCT activity.user_id,activity.* order by date DESC limit 5

Mysql不同参考:http://dev.mysql.com/doc/refman/5.1/en/distinct-optimization.html

答案 3 :(得分:0)

它可以帮助你。

SELECT * FROM activity GROUP BY user ORDER BY date DESC LIMIT 5

答案 4 :(得分:0)

尝试此查询, SELECT DISTINCT * FROM活动ORDER BY date desc LIMIT 5