获取在2个不同列中匹配相同值的所有行

时间:2013-11-02 09:15:37

标签: mysql sql

我有2个表,memberschat

我想获得与$ 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

但它不起作用,我怎么能实现这个目标? 感谢

3 个答案:

答案 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'
"