加入多个SQL查询以显示在线朋友列表?

问题描述:

我正试图将3个表连接在一起,以显示表users的表格列表,其中表仅在其IP =表online中的IP。加入多个SQL查询以显示在线朋友列表?

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表:

ip 
192.168.0.1 
192.168.0.2 
192.168.0.5 

所以查询应抓住id的,找到loginipid了的,然后扫描online表并返回在线用户(假设用户名= 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如果用户= 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; 

谢谢。

更新:我一定很累,因为它突然有效?我很抱歉。

+1

你有什么计划使用多个IP的或使用多人 – 2013-05-13 02:18:30

+0

他们的IP更新,因为它们记录在单个IP的人做的,闲置15分钟后,网上行删除。我稍后将添加一个标识符来解决这些问题。 – user2376117 2013-05-13 02:22:36

+0

查询中缺少什么?它有什么问题吗? – 2013-05-13 02:23:22

问题中包含正确的答案。我发布它只是为了使问题看起来没有被回答。

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;