2012-11-11 48 views
0

我已經編寫了一個MySQL查詢需要做什麼的例子,我試圖把這兩個查詢結合起來,但是我沒有成功這樣做。基本上,這會做的是選擇所有$ session已不是朋友的用戶。把這個亂七八糟的PHP變成一個單一的MySQL查詢

根據我的表格結構,我不知道我需要解釋多少,因爲您可以在下面看到我需要使用我的查詢來做些什麼,但基本上我的朋友表只有每行友誼有一行。 (友誼是唯一有效的,如果state1CASE聲明是必要的獲得從友誼friends ID,因爲我的表不只有一個行的友誼。

$getUsers = mysql_query("SELECT id FROM users WHERE id!=$session"); 
$getFriends = mysql_query("SELECT CASE WHEN userID=$session THEN userID2 ELSE userID END AS friendID 
            FROM friends 
            WHERE (userID=$session OR userID2=$session) 
            AND state='1'"); 

     $usersArray = array(); 
     $friendsArray = array(); 

     while($usersC = mysql_fetch_array($getUsers)) 
     { 
      $usersID = $usersC['id']; 
      array_push($usersArray, $usersID); 
     } 
     while($usersF = mysql_fetch_array($getFriends)) 
     { 
      $friendID = $usersF['friendID']; 
      array_push($friendsArray, $friendID); 
     } 

     print_r(array_merge(array_diff($usersArray, $friendsArray), array_diff($friendsArray, $usersArray))); 

回答

4

你想要的抗加入,您可以通過一個外部影響加入和記錄一個過濾器,連接表是NULL

SELECT users.id 
FROM users LEFT JOIN friends f 
    ON (f.userID = $session AND f.userID2 = users.id AND f.state='1') 
    OR (f.userID = users.id AND f.userID2 = $session AND f.state='1') 
WHERE f.userID IS NULL AND f.userID2 IS NULL 
    AND users.id <> $session 

看到它在sqlfiddle

+0

謝謝,這看起來像它守ld工作,但它沒有返回任何東西。 (同樣,如果用戶在朋友中沒有任何行,它也應該工作) –

+0

在這裏,希望這是有用的:http://sqlfiddle.com/#!2/3ad9a/1 –

+0

@DylanCross:對不起,沒有意識到「朋友」表中存在衝突的「id」列 - 添加限定符應該可以解決它。上面更新了我的答案。 – eggyal

相關問題