我在搞清楚我需要制作的SQL语句时遇到了一些麻烦。
我有2张桌子
友
===================================
friendfromid | friendtoid | request
===================================
用户
=================
userid | username
=================
我需要获取每个用户的用户ID和用户名,这是我的朋友。
我的id在friendfromid或friendtoid中,具体取决于我是否被要求用户或用户请求我。
所以基本上需要发生的是脚本需要查看friends表,获取我的id为friendfromid或friendtoid的所有行检查请求字段是否设置为1,取所有符合该匹配的行然后获取每个friendfromid的id和用户名,或者不是我的朋友。
例如,如果我的id为8且朋友ID为9,那么就说他们要求我他们的id将在friendfromid字段中,我的id将在friendtoid字段中,这意味着脚本将采用他们的id( 9)并将其与用户表中的该用户匹配。
答案 0 :(得分:2)
这将为朋友列表提供朋友ID和朋友姓名:
SELECT u.userid , u.username
FROM Friends f
JOIN Users u
ON (( f.friendfromid ={the ID} AND friendtoid=u.userid)
OR ( f.friendtoid = {the ID} AND friendfromid=u.userid))
WHERE f.request = 1
将{ID} =用户ID放在其朋友列表中。
答案 1 :(得分:1)
应该是这样的:
SELECT *
FROM users
JOIN friends
ON friendfromid != userid
OR friendtoid != userid
WHERE request = 1
AND userid = {the ID}
答案 2 :(得分:1)
无法在1个查询中实现。
要在friendtoid
字段中使用“我的用户ID”获取friendfromid
:
SELECT b.friendtoid FROM Users a, Friends b WHERE request=1 AND friendfromid = a.userid
friendfromid
的反之亦然。
答案 3 :(得分:1)
使用UNION查询,加入朋友,如下所示
SELECT username FROM user INNER JOIN friends ON (userid = friendfrom) WHERE friendto = {myid) AND request = 1
UNION
SELECT username FROM user INNER JOIN friends ON (userid = friendto) WHERE friendfrom = {myid} AND request = 1
请记住,您需要在friendto和friendfrom列上使用索引才能获得性能