我是这个数据库sql语言的新手,所以我会尽量使它简单(我正在使用mysql工作台)
我有一个用户表,我希望多个用户成为彼此的朋友。为此,我创建了friends表,其中有一个user\u id和friends\u user\u 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\u friends(2)时,它应该出现
[1]
[3]
即使这些在朋友表的不同列中。
2条答案
按热度按时间uqjltbpv1#
使用
UNION ALL
若要获取所有好友,请参数化此查询:j7dteeu82#
你可以用
IN
检查任一列是否等于要查找的用户的id,以及CASE ... END
获取不等于要查找的用户id的列。或者你可以用
UNION ALL
方法,因为它可以在user_id
或者user_friend_id
.但只有有这样的索引,这才更好。如果没有,它需要两次扫描,而第一次扫描只需要一次。所以这种情况更糟。