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

...

所以对于上面的表格内容,我的查询应该返回5386因为只有这些用户 ID 与“5”聊天

我的查询是:

$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

我想你正在寻找这个:

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 回答
2

join 子句必须包含一个成员字段和一个聊天字段。但是您可能更喜欢这种方式来编写查询:

$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 回答
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 回答