我的数据库中有两个表
表格:users
包含列:id
,username
,email
等
表格:users_messages
包含列:id
,to
,from
,messages
,sent_time
列to
和from
是users
表中的键users
。问题是我需要:
“从用户名和消息中选择所有用户”。
例如,如果表格行如下所示:
From, To, Message
11, 14, Hi, How are you
14, 11, Hello,
如果11是约翰而14是标记,那么我需要输出如下:
From, To, Message
john, mark, Hi, How are you
mark, john, Hello,
使用我的查询,我只能从列或列获取用户名,但不能同时获取两者的用户名。如何执行向我和两个用户名提供的查询?
以下查询为我提供了空结果:
SELECT u.username, m.message, m.from, m.to
FROM `users_messages` m, `users` u
where
m.from = u.id and m.to = u.id
LIMIT 0 , 30
我尝试了其他查询,但无法获得所需的输出。我是否还需要自助加入消息表?
答案 0 :(得分:4)
SELECT u1.username AS "sender", u2.username AS "recipient", m.message, m.from, m.to
FROM `users_messages` m
LEFT JOIN `users` u1 ON (u1.id = m.from)
LEFT JOIN `users` u2 ON (u2.id = m.to)
WHERE m.from = XX OR m.to = XX
答案 1 :(得分:4)
试试这个
select u.`name` as `FROM`, u2.`name` as `TO`, `Message`
from users_messages um
inner join users u On um.`From` = u.id
inner join users u2 On um.`To` = u2.id
LIMIT 0 , 30
如果您想从一个用户那里获取指定的消息,请添加此
WHERE u.`name` = 'mark' // to get messages FROM mark
或者
WHERE u2.`name` = 'mark' // to get messages TO mark
答案 2 :(得分:0)
是的,自我加入可以帮助您实现所需的输出:
SELECT u1.username, m.message, u2.username
FROM users_messages m, users u1, users u2
where
m.from = u1.id and m.to = u2.id
LIMIT 0 , 30
假设:from和to将没有空值