Mysql SQL好友列表查询
我是这个数据库SQL语言的新手,所以我会尽量使它简单。(我正在使用MySQL工作台) 我有一个用户表,我希望多个用户彼此成为朋友。为此,我创建了一个friends表,其中有一个user_id和一个friend_user_id。我想把它理解为:“2是1和3的朋友,1是2的朋友,3是2的朋友”。所以当在这个朋友表上插入时,我从来没有做过这样的事情(1,2),(2,1)。我正在寻找一个过程,通过接收一个user\u id作为参数来返回他的所有朋友,无论他们是在user\u id列中还是在friend\u user\u id列中。例如,如果我查找用户2的朋友,它应该显示1列中的1和3,因为1和3是2的朋友 更具体地说,当我呼叫get_friends(2)时,它应该出现Mysql SQL好友列表查询,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我是这个数据库SQL语言的新手,所以我会尽量使它简单。(我正在使用MySQL工作台) 我有一个用户表,我希望多个用户彼此成为朋友。为此,我创建了一个friends表,其中有一个user_id和一个friend_user_id。我想把它理解为:“2是1和3的朋友,1是2的朋友,3是2的朋友”。所以当在这个朋友表上插入时,我从来没有做过这样的事情(1,2),(2,1)。我正在寻找一个过程,通过接收一个user\u id作为参数来返回他的所有朋友,无论他们是在user\u id列中还是在friend\
[1]
[3]
即使它们在friends表的不同列中。您也可以使用中的
检查任一列是否等于您要查找的用户的ID以及大小写。。。结束
以获取不等于要查找的用户ID的列
SELECT CASE
WHEN user_id = 2
THEN user_friend_id
WHEN user_friend_id = 2
THEN user_id
END friend
FROM friends
WHERE 2 IN (user_id, user_friend_id);
或者,您可以使用UNION-ALL
方法,该方法的性能可能会更好,因为它可以在user\u-id
或user\u-friend\u-id
上使用索引
SELECT user_id friend
FROM friends
WHERE user_friend_id = 2
UNION ALL
SELECT user_friend_id friend
FROM friends
WHERE friend_id = 2;
但只有有这样的指数,这才更好。如果没有,它将需要在表上进行两次扫描,而第一种方法只需要一次。因此,在这种情况下情况更糟。使用UNION ALL
获取所有好友,参数化此查询:
select friend_user_id as friend_id from friends f where f.user_id = 2 --parameter
union all
select user_id as friend_id from friends f where f.friend_user_id = 2 --parameter
尝试检查SQL连接