0

特定の SELECT 変数の結果を別のテーブルの別の列に結合しようとしています。

user_friends テーブル:

+-------------------------------------------+
|    friend_id | friend_one | friend_two    |
+-------------------------------------------+

ユーザー テーブル:

+------------------+
|   uiD | username |
+------------------+

次のクエリは、フォロワーがフォローしているランダムな友達を取得し、私に提案します。現在、uiD(id) のみを取得しています。これら 2 つのテーブルを結合し、以下の GROUP BY possible_friend を取得して users テーブルに接続する方法がわかりません。

$sth = $this->db->prepare("
                            SELECT friend_two AS possible_friend
                            FROM user_friends
                            WHERE friend_one IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD) 
                            AND friend_two NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD)
                            AND NOT friend_two = :uiD
                            GROUP BY possible_friend
                            ORDER BY RAND()
                            ");
$sth->execute(array(':uiD' => $uiD));

$data = $sth->fetch();
return $data;

例として、私はユーザー 10 です。

uiD = 10: ユーザー名: ジョナサン

uiD = 20: ユーザー名: ガブリエル

uiD = 30: ユーザー名: リサ

uiD = 40: ユーザー名: エミリー

私は Gabriel をフォローしている Jonathan としてログインしていますが、Jonathan は Lisa も Emily もフォローしていません。次に、divに表示する必要があります。

提案に従ってください: エミリーまたはリサ

上記のクエリでは、ID をランダムに取得することはできますが、users テーブルの Username を user_friends テーブルの possible_friend と結合することはできません。

私は次のことを試しました。

    $sth = $this->db->prepare("
                                SELECT F.friend_two AS possible_friend, U.username
                                FROM user_friends F, users U
                                WHERE F.friend_one IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD) 
                                AND F.friend_two NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD)
                                AND NOT F.friend_two = :uiD
                                GROUP BY possible_friend
                                ORDER BY RAND()
                                ");
    $sth->execute(array(':uiD' => $uiD));

    $data = $sth->fetch();
    return $data;

U.username を possible_friend に接続できないため、別のユーザー名を返すだけです。

更新バージョン - 動作中のバージョン:

    SELECT F.friend_two AS possible_friend, U.username, U.uiD, U.photo
    FROM user_friends F, users U
    WHERE F.friend_one IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD) 
    AND F.friend_two NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD)
    AND NOT F.friend_two = :uiD
    AND U.uiD NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD) 
    AND U.photo NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :uiD) 
    GROUP BY possible_friend
    ORDER BY RAND()
4

1 に答える 1