2

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

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

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

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

如果用户= 5,我还需要找出一种切断IP的方法,这样它就不会在列表中显示自己。在你们中的一个好人帮助我之后,我可能会自己做到这一点。:)

我的尝试,虽然很差:

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;

谢谢你。

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

4

1 回答 1

0

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

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;
于 2013-06-07T01:01:21.070 回答