MySQL-复杂的查询问题,多个表


MySQL - Complex query issue, multiple tables

我在计算需要生成的SQL语句时遇到了一些问题。

我有两张桌子

朋友

===================================
friendfromid | friendtoid | request
===================================

用户

=================
userid | username
=================

我需要得到每个用户的用户ID和用户名,这是我的朋友。

我的id在friendfromid或friendtoid中,这取决于是用户请求我还是用户请求我。

因此,基本上需要做的是,脚本需要查看friends表,获取我的id为friendfromid或friendtoid的所有行,检查请求字段是否设置为1,获取所有匹配的行,然后获取每个friendfroid或friendoid的id和用户名,这不是我的。

例如,如果我的id是8,而朋友的id是9,假设他们要求我他们的id在friendfromid字段中,而我的id在friendtoid字段中,这意味着脚本将获取他们的id(9),并将其与users表中的用户相匹配。

这将提供带有好友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

Put{the ID}=需要其好友列表的用户ID。

应该是这样的:

SELECT * 
FROM users 
JOIN friends 
ON friendfromid != userid
OR friendtoid != userid
WHERE request = 1
  AND userid = {the ID}

无法在一个查询中实现。

要在friendfromid字段中获得带有"我的用户ID"的friendtoid

SELECT b.friendtoid FROM Users a, Friends b WHERE request=1 AND friendfromid = a.userid

friendfromid反之亦然。

使用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列上的索引来提高的性能