私はそのようにユーザーアクティビティテーブルから行を取得しています
SELECT user_id, type, source_id FROM activity ORDER BY date DESC LIMIT 5
しかし、同じユーザーがアクティビティ フィードを詰まらせたくないので、同じ user_id を含む 5 行のうち最大 3 行を取得できるようにしたいと考えています。
これを行う方法はありますか?ありがとう :)
これは「従来の」方法で、最初にユーザー ID を列挙し、この情報をフィルターとして使用します。
SELECT user_id, type, source_id
FROM (select a.*,
@rn := if (@user_id = user_id, @rn + 1, 1) as rn,
@user_id := user_id
from activity a cross join
(select @rn := 0, @user_id := -1) const
order by user_id
) a
WHERE rn <= 3
ORDER BY date DESC
LIMIT 5;
これを試すことができます:-
SELECT user_id, type, source_id
FROM activity
WHERE 3 > (
SELECT count( * )
FROM activity AS activity1
WHERE activity .user_id = activity1.user_id
AND activity.user_id > activity1.user_id)
ORDER BY activity.user_id DESC
LIMIT 5