我正试图找到两个用户分开的联赛(盖子)。
以下是我的表格:
表联赛:
*id* lname
--------------
1 Hard C
3 Fun
5 Crazy
表格匹配:
*userid* *lid*
-----------------
1 1
4 5
1 3
2 1
4 1
4 3
*是主键
match.lid
是leagues.id
的外键(用户不能两次成为同一联盟的一员)
这是我到目前为止(开始):
SELECT t1.lid, t2.lname
FROM match t1
JOIN leagues t2 on t1.lid = t2.id
到目前为止,我设法加入这两个表并获取名称。我的最终目标是显示lid
两个用户属于同一联盟的位置,比如说userid
1和4。
userid
1是lid
1和3
userid
4是lid
5,1和3
两位用户都在联赛(lid
)1和3
所以我需要一个只显示两个用户会面的联盟的查询。像这样:
lid lname
--------------
1 Hard C
3 Fun
由于userid
1和4在联赛1和3中相遇,结果应该表明。我可以为每个用户运行两个查询,并检查两个用户通过php遇到哪些联赛,但我认为运行一个查询更有效。
答案 0 :(得分:0)
有几种方法。最直截了当的是:
SELECT id AS lid,
lname
FROM leagues
WHERE id IN
( SELECT lid
FROM match
WHERE userid = 1
)
AND id IN
( SELECT lid
FROM match
WHERE userid = 4
)
;
另一种方式,虽然不那么直接,但可能表现更好 - 你可以尝试看看 - 是使用JOIN
:
SELECT id AS lid,
lname
FROM leagues
JOIN match AS match1
ON match1.lid = leagues.id
AND match1.userid = 1
JOIN match AS match2
ON match2.lid = leagues.id
AND match2.userid = 4
;
答案 1 :(得分:0)
SELECT m1.lid, l.lname FROM
`match` m1, `match` m2, leagues l
WHERE m1.lid = m2.lid AND m1.lid = l.id
AND m1.userid = 1
AND m2.userid = 4