1

単一のクエリで次のタスクを完了する方法を見つけようとしています。基本的に、ユーザーの ID を指定して、そのユーザーが友達であるすべてのユーザーのユーザー プロファイルを返したいと考えています。ご不明な点がございましたら、詳しくご説明いたします。ありがとう!

テーブル「ユーザー」:

 user_id  |  col1  |  col2   |  etc
-----------------------------------------
 a        |  ***   | ***     |  ***
-----------------------------------------
 b        |  ***   | ***     |  ***

テーブル「users_friends」

 user_id  |  friend_user_id  |  status
-----------------------------------------
 a        |  b               |  1
-----------------------------------------
 b        |  a               |  1

aの値が与えられた場合、テーブルusers_friendsで行を見つけます。ここで

user_id = a
status = 1

そのクエリの結果の行を使用して、users_friendsテーブルの行を見つけます。

user_id = b          (column `user_friend_id` from resulting rows) 
user_friend_id = a   (column `user_id` from resulting rows) 
status = 1

行が返された場合は、テーブル「users」から行を選択します。

user_id = b          (column `user_id` from resulting row)

これは私が思いついた本当に大まかなものです。私はそれが私が探していることをしていると思いますが、もっと良い方法があると確信しています。

SELECT * FROM users WHERE user_id IN 
    (SELECT user_id FROM users_friends WHERE friend_user_id IN
              (SELECT user_id FROM users_friends WHERE user_id = 'someuserid' AND status = 1 ) AND status = 1 );
4

3 に答える 3