1

最後の 5 行に限定されたユーザー アクティビティを表示するアクティビティ フィードを作成しています。

SELECT * FROM activity ORDER BY date desc LIMIT 5

問題は、同じユーザーがアクティビティ フィードを混乱させたくないので、user_id が互いに異なる最後の 5 つの結果を取得したいということです。

どうすればこれを行うことができますか?

4

5 に答える 5

1

これはうまくいくはずです:

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

于 2013-03-22T20:08:09.087 に答える
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

ここでフィドルを参照してください。

于 2013-03-22T21:18:51.553 に答える
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

于 2013-03-22T20:09:13.413 に答える
0

それはあなたを助けることができます。

SELECT * FROM activity GROUP BY user ORDER BY date DESC LIMIT 5
于 2013-03-22T20:09:41.560 に答える
0

このクエリを試してください。SELECT DISTINCT * FROM activity ORDER BY date desc LIMIT 5

于 2013-03-22T20:17:09.860 に答える