我有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
...
因此,对于上面的表格内容,我的问题应该返回53
和86
,因为只有这些用户ID与'5'聊天
我的查询是:
$q = "
SELECT members.user_id
FROM members
LEFT JOIN chat ON chat.to = '5' OR chat.from = '5'
"
预期输出为:
user_id
86
53
但它不起作用,我怎么能实现这个目标? 感谢
答案 0 :(得分: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)";
答案 1 :(得分:2)
我认为你正在寻找这个:
select chat.to from chat where chat.from=5
union
select chat.from from chat where chat.to=5
表示用户:5与
聊天的每个user_id答案 2 :(得分: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'
"