2012-03-20 63 views
1

我試圖找到兩個用戶分開的聯盟(lid)。mysql select matching results

這裏是我的表:

表聯賽:

*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
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 
+0

簡單快速的查詢花費了0.0004秒 – user962449 2012-03-20 20:42:16

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 
;