2012-03-20 19 views
1

私は2人のユーザーが離れているリーグ(ふた)を探しています。ここでmysqlは一致する結果を選択します

は私のテーブルです:

表リーグ:

*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への外部キー(ユーザーです同じリーグに2回参加することはできません)

は、ここで私は今のところ(スタート)持っているものです。

SELECT t1.lid, t2.lname 
FROM match t1 
JOIN leagues t2 on t1.lid = t2.id 

をこれまでのところ、私は2つのテーブルを結合し、名前を得ることができました。私の究極の目標は、2人のユーザーが同じリーグの一部である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 

リーグ1及び3に会う1 useridので、図4に示すように、結果はそれを示すべきです。ユーザーごとに2つのクエリを実行し、どちらのユーザーがphp経由でどのリーグを満たすかを確認できますが、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 
+0

シンプルで高速な 'クエリは0.0004秒を要した' – user962449

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 
; 
関連する問題