2012-01-18 2 views
1

내 '친구'테이블에는 다음과 같은 열이 있습니다 : ID, 사용자 ID, USERID2, 주MYSQL 선택 상호 친구

사용자 ID 및 USERID2 데이터베이스에 투입되는 특정 순서가 없습니다. 나는이 시도했다

$quer = mysql_query(" 
SELECT CASE WHEN userID=$id THEN userID2 ELSE userID END AS friendID 
FROM friends WHERE userID=$id OR userID2=$id"); 

그러나 그것은 작동하지 않습니다 :

나는 현재 사용자의 친구를 찾으려면이 쿼리를 사용

SELECT 
CASE WHEN userID=$id OR userID=$session THEN userID2 
ELSE userID END AS friendID 
FROM friends WHERE (userID=$session OR userID2=$session) 
AND (userID=$id OR userID2=$id) AND friendID!=$session 

은 행의 경우를 반환하지해야 friendID (난 내 두 번째 쿼리에 추가 한) = $ 세션

편집 : 나는 같은 friendID 행을 반환 할 것을 $ id와 $ session은 공통점이 있습니다. 나는 그것이 왜 작동하지 않는지 정확히 알지 못합니다.

+2

당신이 출력으로 얻으려고 무엇을? 두 번째 쿼리가 "작동하지 않는 이유"는 무엇입니까? –

+0

userID와 friendID 모두'$ session'을 사용하고 있습니다. 그럴까요? '$ session'의 실제 값은 무엇입니까? – Arjan

+0

$ id와 $ session이 공통으로 가지고있는 friendID 행으로 반환하고 싶습니다. 나는 그것이 왜 작동하지 않는지 정확히 알지 못합니다. –

답변

5
설명을 한 후

(실제로 "상호"일부 읽기) :

SELECT a.friendID 
FROM 
     (SELECT CASE WHEN userID = $id 
         THEN userID2 
         ELSE userID 
       END AS friendID 
     FROM friends 
     WHERE userID = $id OR userID2 = $id 
    ) a 
    JOIN 
     (SELECT CASE WHEN userID = $session 
         THEN userID2 
         ELSE userID 
       END AS friendID 
     FROM friends 
     WHERE userID = $session OR userID2 = $session 
    ) b 
    ON b.friendID = a.friendID 
+0

첫 번째 쿼리는 내가 잘하는 사용자 친구를 선택하는 방법의 예에 불과하지만 지금은 다른 사용자가 공통으로 가지고있는 사용자 친구를 선택하려고합니다. –

+0

$ id는 상대방 사용자, $ session은 나 자신 일 것입니다. 그래서 나는 $ id와 공통점이있는 친구를 찾고 싶습니다. –

+0

아, 죄송합니다. 그래서, 두 친구는 id :'$ id'와'$ session'을 가지고 있습니다. 편집 중입니다. –