2012-03-20 3 views
1

두 명의 사용자가 떨어져있는 리그 (뚜껑)를 찾으려고합니다.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 

를 지금까지 내가 두 테이블에 가입하고 이름을 얻을 수 있었다. 나의 궁극적 인 목표는 두 사용자가 같은 리그의 일부인 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, 결과는 것을 보여 주어야한다. 각 사용자에 대해 두 개의 쿼리를 실행하고 두 사용자가 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

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 
; 
관련 문제