连接多个SQL查询来显示在线好友列表


Joining multiple SQL queries to display online friends list?

我试图将3个表连接在一起,以显示表users的列表,仅从表subscribers中获取,其中它们的IP =表online中的IP。

subscribers表:(不允许重复,type告诉是否其他用户订阅。)

sender  recipient
1       5     
5       3 

users:

id  loginip
1   192.168.0.1
3   192.168.0.2
5   192.168.0.3

online table:

ip
192.168.0.1
192.168.0.2
192.168.0.5

所以查询应该抓取id,找到idloginip,然后扫描online表并返回在线用户:(假设UserID = 5)

sender  recipient  send_ip       reci_ip
5       3          192.168.0.3   192.168.0.2
1       5          192.168.0.1   192.168.0.3

我还需要找出一种方法来削减IP,如果user = 5,所以它不会显示你自己的列表。在你们这些好人帮我一点忙之后我也许可以自己做。:)

我的尝试,虽然很差:

SELECT  f.sender as friend1,
    f.recipient as friend2,
    u1.loginip ip1,
    u2.loginip ip2
FROM subscribers f
INNER JOIN users u1 ON u1.id = f.sender
INNER JOIN users u2 ON u2.id = f.recipient
INNER JOIN online o1 ON o1.ip = u1.loginip
INNER JOIN online o2 ON o2.ip = u2.loginip
WHERE 
    f.sender = 5 OR 
    f.recipient = 5;

谢谢。

更新:我一定很累了,因为它突然起作用了?我很抱歉。

正确答案包含在问题中。我把它贴出来只是为了不让这个问题看起来没有答案。

SELECT  f.sender as friend1,
    f.recipient as friend2,
    u1.loginip ip1,
    u2.loginip ip2
FROM subscribers f
INNER JOIN users u1 ON u1.id = f.sender
INNER JOIN users u2 ON u2.id = f.recipient
INNER JOIN online o1 ON o1.ip = u1.loginip
INNER JOIN online o2 ON o2.ip = u2.loginip
WHERE 
    f.sender = 5 OR 
    f.recipient = 5;