我正在尝试找到两个用户属于的联盟(lid)。
下面是我的表格:
表联盟:
*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检查两个用户遇到的联盟,但我认为运行一个查询会更有效率。
发布于 2012-03-21 04:37:10
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发布于 2012-03-21 04:34:42
有几种方法。最简单的是:
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
;https://stackoverflow.com/questions/9794275
复制相似问题