我试图弄清楚如何在单个查询中完成以下任务。 基本上,给定用户的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
如果返回任何行,请从表格'用户'中选择行。其中
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 );
答案 0 :(得分:1)
select u.*
from
users u
inner join
users_friends f on u.user_id = f.friend_user_id
where
f.status = 1
and f.friend_user_id = 'a'
答案 1 :(得分:0)
假设朋友表中没有重复项:
SELECT u.user_id, u.col1, u.col2
JOIN users_friends AS f1 ON u.user_id=f1.user_id
JOIN users_friends AS f2 ON f1.user_id=f2.friend_id AND f1.friend_id=f2.user_id
WHERE f1.status=1 AND f2.status=1 AND f2.user_id='a'
答案 2 :(得分:0)
SELECT u.user_id, u.col1
FROM users_friends AS f
JOIN users AS u
ON f.friend_user_id = u.user_id
WHERE f.user_id = 'a'
AND f.status = 1