2017-02-02 9 views
1

私は相互の友人のクエリを作成しようとしています。しかし、正しい結果を得るために2つのテーブルをマージする方法が不明です。相互の友人のクエリ

したがって、セッションユーザーが友人と友だちを共有している場合は、共通の友人が1つです。私が探しているのは、最善の解決策、仕事を行うための最速で最小のクエリです。

ユーザテーブル

id | first | last | username 
---------------------------- 

友人表

id | user 1_id | user2_id | status 
---------------------------------- 

しようとしたクエリ

$collectmutualfriends = mysqli_query($mysqli," 
    SELECT 
       user.id, 
       user.first, 
       user.last, 
       user.username 
    FROM  user 
    LEFT JOIN friends as friends1 
      ON friends1.user1_id = user.id 
      AND friends1.user2_id = '$user2_id' 
      AND friends1.status = 2 

    LEFT JOIN friends as friends2 
      ON friends2.user2_id = user.id 
      AND friends2.user1_id = '$user2_id' 
      AND friends2.status = 2 

    GROUP BY friends2.user2_id 
    "); 
$nummutual = mysqli_num_rows($collectmutualfriends); 
if($nummutual==1){ 
    echo"<a href='mutualfriends.php?username=".$_GET['username']."'>".$nummutual." Mutual Friend<br></a>"; 
    }else if($nummutual>1){ 
    echo"<a href='mutualfriends.php?username=".$_GET['username']."'>".$nummutual." Mutual Friends<br></a>"; 
    } 

UPDATE

$user1_id = $_SESSION['id']; 
$user2_id = $data['id']; 

$ user1_idと$ user2_idは、最初にフレンドリクエストを送信した人によって、フレンドテーブルのuser1_idまたはuser2_idのいずれかに入れることができます。

+0

はあなたにもいくつかのサンプルデータをポストすることはできますか? –

+0

2人のユーザーが友達である場合、テーブルフレンドに1〜2行ありますか? –

+0

他の人はどうしますか? – Strawberry

答えて

3

これはトリックを行う必要があります。

$sql = "SELECT u.* 
      FROM friends f1 
    INNER JOIN friends f2 ON (f2.user2_id = f1.user2_id) 
    INNER JOIN user u ON (u.id = f2.user2_id) 
     WHERE f1.user1_id = '$user1_id' 
      AND f2.user1_id = '$user2_id'"; 
+0

私のクエリと同じように、すべてのプロファイルで結果が表示されません。 セッションユーザーは、フレンドリクエストを送信したユーザーに応じて、フレンドテーブル内のuser1_id行またはuser2_id行のいずれかに入れることができます。これはこれまでどんな違いがありますか? – Gateway

+1

私はあなたのデザインの欠陥としてこれを見ています。ユーザAとユーザBが友達である場合、その反対も真であり、ユーザBとユーザAも友達である。この場合、ユーザーAのすべてのフレンド、またはユーザーBのすべてのフレンドを簡単に選択することができます。何をしているのか、データベースuser1_idとカラムuser2_idを2回照会する必要があります。私のアドバイスは、友情ごとに2つの行を保存することです。 –

+0

だからuser1_idにはAがあり、user2_idにはbがあります。別の行にuser1_idがB、user2_idがAとなっています。 – Gateway

関連する問題