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

时间:2012-01-12 04:18:24

标签: php mysql sql select join

我在搞清楚我需要制作的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)并将其与用户表中的该用户匹配。

4 个答案:

答案 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列上使用索引才能获得性能