2

3 つのテーブルを結合して、テーブルusersから取得したテーブルのリストを表示しようとしていますsubscribersが、その IP はテーブル内の IPonlineです。

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の を検索してloginipからid、テーブルをスキャンして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

また、ユーザー = 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 に答える