**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
6个月前关闭。
Improve this question
在我的数据库中有两个表:
user, columns: id, username
friends, columns: this_friend_id, that_friend_id
在我的网站上,用户可以互相发送好友请求,当一个用户接受另一个用户的好友请求时,friends
表中的一个条目在this_friend_id
列中包含发送请求的用户的id,另一个条目在that_friend_id
列中包含接受好友请求的用户。
当一个用户登录到页面时,该用户应该能够看到一个表中的所有用户,包括所有用户以及他/她是否是他/她的朋友。但是我无法完成第二件事。登录的用户是在his_friend_id
列还是在that_friend_id
列中应该没有关系。
我想选择用户的所有好友。
以下是我目前所尝试的方法:(出于演示目的,我为用户选择了id = 3)
SELECT user.id, friends.this_friend_id, friends.that_friend_id
FROM friends
WHERE friends.this_friend_id = 3 OR friends.that_friend_id = 3
INNER JOIN user
ON friends.this_friend_id = user.id OR friends.that_friend_id = user.id;
我做错了什么?
2条答案
按热度按时间p4tfgftt1#
WHERE子句位于JOIN子句(之后(:
ylamdve62#
因此,您的运算符顺序是错误的。一个简单查询的运算符顺序应该是:
因此,您的查询将变成:
但是,使用or语句并不好,因为它会导致对表进行完全扫描。如果要创建性能更高的脚本,可以执行以下操作,其中使用union语句而不是or来获取this_friend_id和that_friend_id联接。