0

私は2つのテーブルを持っていmembersますchat.

$user_id とチャットしたすべてのメンバー ID を取得したいのですが、ここでは $user_id = '5' と仮定します

chatテーブルは次のようなものです:

id     from    to     message
1      32      12     test
2      25      18     new message
3      5       86     another message
4      53      5      final message

membersテーブル:

id user_id
1  1
2  2
3  3
4  4
5  5

...

したがって、上記の表の内容については、これらのユーザー ID のみが「5」とチャットしたため53、クエリが返されるはずです。86

私のクエリは次のとおりです。

$q = "
SELECT members.user_id
FROM members
LEFT JOIN chat ON chat.to = '5' OR chat.from = '5'
"

期待される出力は次のとおりです。

user_id
86
53

しかし、それは機能していません。どうすればこれを達成できますか? ありがとう

4

3 に答える 3

2

join 句には、メンバーからの 1 つのフィールドとチャットからの 1 つのフィールドが含まれている必要があります。しかし、あなたのクエリを書くためにその方法を好むかもしれません:

$q = "
SELECT CASE chat.to WHEN 5 THEN chat.from ELSE chat.to END as the_other_guy
FROM chat
WHERE chat.from = 5 OR chat.to = 5";

編集:次回は、質問で本当に必要なものを尋ねてください。あなたのことを推測することはできません. 「ユーザー 5 と会話したメンバーの表示 ID とユーザー名」は、「2 テーブルに参加する方法」という最初のタイトルよりも明確でした。

$q = "
SELECT CASE chat.to WHEN 5 THEN chat.from ELSE chat.to END as the_other_guy, username
FROM chat, members
WHERE 
  (chat.from = 5 AND members.id=chat.to) 
OR (chat.to = 5 AND members.id=chat.from)";
于 2013-11-02T09:19:10.383 に答える
2

私はあなたがこれを探していると思います:

select chat.to from chat where chat.from=5
union
select chat.from from chat where chat.to=5

user:5 がチャットしたすべての user_id を意味します

于 2013-11-02T09:30:01.407 に答える
0
$q = "
SELECT m.id
FROM members as m
LEFT JOIN chat as c 
  ON c.to = m.user_id OR c.from = m.user_id
WHERE m.user_id = '5'
"
于 2013-11-02T09:18:19.763 に答える