最後の 5 行に限定されたユーザー アクティビティを表示するアクティビティ フィードを作成しています。
SELECT * FROM activity ORDER BY date desc LIMIT 5
問題は、同じユーザーがアクティビティ フィードを混乱させたくないので、user_id が互いに異なる最後の 5 つの結果を取得したいということです。
どうすればこれを行うことができますか?
これはうまくいくはずです:
SELECT user_id, MAX(date) FROM activity GROUP BY user_id ORDER BY date DESC LIMIT 5
各ユーザーに複数がない場合は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
ここでフィドルを参照してください。
次のようなクエリを使用すると簡単なことだと思います
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
それはあなたを助けることができます。
SELECT * FROM activity GROUP BY user ORDER BY date DESC LIMIT 5
このクエリを試してください。SELECT DISTINCT * FROM activity ORDER BY date desc LIMIT 5