0

我需要在匹配三 (3) 位或更多朋友的比赛中获取已进行实时签到(checkins.ctype='live')的用户 ID 的不同列表

这是数据库设计:

在此处输入图像描述

我成功检索了超过 3 个实时签到用户的匹配列表,但我需要确定他们是否是我的朋友。

到目前为止我的代码:

选择不同的
    f1.id
从
    粉丝f1

加入签到 c
开 c.fanuser_id = f1.id

在哪里
c.ctype = '直播'
和
c.match_id IN (
                                选择
                                    c1.match_id
                                从
                                    签到 c1
                                在哪里
                                    c1.ctype = '直播'
                                通过...分组
                                    c1.match_id
                                拥有
                                    计数(*)> 3
                            )

...并且他有 3 个或 3 个以上的朋友在同一场比赛中签到 (c.match_id)

任何想法?谢谢

4

1 回答 1

1

What about joining checkins to fanuser_friends on fanuser_id, then further join to checkins on friend_id, finding the number of relevant friends by grouping by fanuser_id and match_id, and then limiting the result on the number of friends?

I.e.

SELECT DISTINCT c.fanuser_id
FROM checkins c 
INNER JOIN fanuser_friends f on 
f.fanuser_id = c.fanuser_id 
INNER JOIN checkins c2
on c2.fanuser_id = f.friend_id
AND c2.match_id = c.match_id
WHERE c.ctype = 'live'
AND c2.ctype = 'live'
GROUP BY c.fanuser_id, c.match_id
HAVING COUNT(*) >= 3;
于 2012-12-13T14:43:32.090 回答