2

私の「友達」テーブルには次の列があります: id、userID、userID2、state

userID と 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=$session (2 番目のクエリに追加した) の場合、行を返すべきではありません。

EDIT : $id と $session が共通している friendID 行として返したいと思います。なぜ機能しないのか正確にはわかりません。

4

1 に答える 1

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 
于 2012-01-18T06:49:36.347 に答える