2

私はそのようにユーザーアクティビティテーブルから行を取得しています

SELECT user_id, type, source_id FROM activity ORDER BY date DESC LIMIT 5

しかし、同じユーザーがアクティビティ フィードを詰まらせたくないので、同じ user_id を含む 5 行のうち最大 3 行を取得できるようにしたいと考えています。

これを行う方法はありますか?ありがとう :)

4

2 に答える 2

1

これは「従来の」方法で、最初にユーザー 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;
于 2013-08-17T11:16:45.740 に答える
1

これを試すことができます:-

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
于 2013-08-17T11:18:07.197 に答える