我试图将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
,找到id
的loginip
,然后扫描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;