SELECT
FRIEND.friend_two AS possible_friend, USERS.username AS possible_username
FROM
user_friends FRIEND, users USERS
WHERE
FRIEND.friend_one IN (SELECT friend_two FROM user_friends WHERE friend_one = :id)
AND FRIEND.friend_two NOT IN (SELECT friend_two FROM user_friends WHERE friend_one = :id)
AND NOT FRIEND.friend_two = :id
GROUP BY possible_friend
ユーザー
+------------+------------------+
| id | username |
+------------+------------------+
| 10 | Josh |
+------------+------------------+
| 20 | Steward |
+------------+------------------+
| 30 | Fenton |
+------------+------------------+
user_friends
+------------+------------+------------+------------+
| friend_id | friend_one | friend_two | Role |
+------------+------------+------------+------------+
| ramdom_id | 10 | 10 | me +
+------------+------------+------------+------------+
| ramdom_id | 20 | 20 | me +
+------------+------------+------------+------------+
| ramdom_id | 10 | 20 | friend +
+------------+------------+------------+------------+
| ramdom_id | 20 | 30 | friend +
+------------+------------+------------+------------+
friend_one = 10 (Josh) -> follows -> friend_two = 20 (Steward)
friend_one = 20 (Steward) -> follows -> friend_two = 30 (Fenton)
var_dump($クエリ); 次のテキストを表示します。
Array ( [possible_friend] => 30 [possible_username] => STEWARD )
var_dump のエラーは、私が既に Steward をフォローしており、Steward の ID が (20) であることです。私が示したいのは、
Array ( [possible_friend] => 30 [possible_username] => FENTON )
Fenton には の ID が(30)
あり、Josh(10)
ログインしているユーザーは Fenton をフォローしていません。
Josh(10)
がログインしている場合は、フォローしていないのにフォローしているためJOSH
、フォローすることを提案します。Fenton(30)
Steward(20)
Fenton(30)
Josh(10)
このクエリが終了すると、その目的は、上記で説明したように、ユーザーがフォローするように友人の友人を提案することです。
FENTON の var_dump で説明したように、GROUP BY を使用して、提案されているユーザーに正しいユーザー名が出力されていることを確認するにはどうすればよいですか。現時点では、クエリの「AS possible_friends」ではなく、既にフォローしているユーザーのランダムなユーザー名を取得しています。