mysql选择匹配结果

时间:2012-03-20 20:20:09

标签: mysql sql

我正试图找到两个用户分开的联赛(盖子)。

以下是我的表格:

表联赛:

*id*    lname
--------------
 1      Hard C
 3      Fun
 5      Crazy

表格匹配:

*userid*   *lid* 
-----------------
   1         1
   4         5
   1         3
   2         1
   4         1
   4         3

*是主键

match.lidleagues.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遇到哪些联赛,但我认为运行一个查询更有效。

2 个答案:

答案 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