特定の 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()