2014-01-07 22 views
1

這是我的方式來檢查我的數據庫中的共同朋友。使用MySql查找表格中的常見值JOINS

例如,如果用戶有朋友用戶:(1,2,3,4),並且用戶2有朋友用戶:(2,4,5)我想要顯示(2和4)。

有沒有更好的方法使用MYSQL JOINS來做這件事?

我有一個users表蒙山包含所有用戶ID和friendsuser_oneuser_twouser_id列。

$user_one_fr = $db->query("select * from `friends` where `user_one` = '$session_user_id' or `user_two` = '$session_user_id'"); 
$user_two_fr = $db->query("select * from `friends` where `user_one` = '$user_id' or `user_two` = '$user_id'"); 

    while ($loop_user_one_fr = mysqli_fetch_assoc($user_one_fr)) { 
     if($loop_user_one_fr["user_one"] == $session_user_id) 
      $user_one_fr_array[] = $loop_user_one_fr["user_two"]; 
     else 
      $user_one_fr_array[] = $loop_user_one_fr["user_one"]; 
    } 


    while ($loop_user_two_fr = mysqli_fetch_assoc($user_two_fr)) { 
     if($loop_user_two_fr["user_one"] == $user_id) 
      $user_two_fr_array[] = $loop_user_two_fr["user_two"]; 
     else 
      $user_two_fr_array[] = $loop_user_two_fr["user_one"]; 

    } 

    $mutual_fr = array_intersect($user_one_fr_array, $user_two_fr_array); 

    foreach ($mutual_fr as $fr) 
    echo $fr . ', '; 
+0

聯接將是一個不錯的選擇,爲什麼你不想使用它們? –

+0

因爲我不太瞭解他們。我的意思是我知道他們是如何工作的,但我在編碼時遇到一些困難。 :) – rexhin

回答

0

你能做到這樣

SELECT f1.friend mutual_friend 
    FROM 
(
    SELECT IF(user_one = :user_id, user_two, user_one) friend 
    FROM friends 
    WHERE :user_id IN (user_one, user_two) 
) f1 JOIN 
( SELECT IF(user_one = :session_user_id, user_two, user_one) friend 
    FROM friends 
    WHERE :session_user_id IN (user_one, user_two) 
) f2 
    ON f1.friend = f2.friend; 

SELECT IF(user_one IN(:user_id, :session_user_id), user_two, user_one) mutual_friend 
    FROM friends 
WHERE :user_id IN (user_one, user_two) 
    OR :session_user_id IN (user_one, user_two) 
GROUP BY IF(user_one IN(:user_id, :session_user_id), user_two, user_one) 
HAVING COUNT(*) > 1; 

樣本輸出(在這兩種情況下):

 
| MUTUAL_FRIEND | 
|---------------| 
|    2 | 
|    4 | 

這裏是SQLFiddle演示

+0

這是我需要的。非常感謝你 :) – rexhin