2014-10-27 92 views
0

我在尝试进行简单查询时遇到了问题。 我的表是:带子查询的MySql查询

用户

+-------+----------+ 
| id | username | 
+-------+----------+ 

消息

+-------+-------------+------------+--------+ 
| id | receiver_id | sender_id | text | 
+-------+-------------+------------+--------+ 

我需要得到来自或从SEPECIFIC用户收到的所有消息(知道他的用户名)。 但我也需要获取收件人和发件人用户名。

我用

SELECT * from user U, messages M where (M.sender_id OR M.receiver_id)=(select id from user where username = 'Guy1') group by M.id 

这工作,但现在我需要他们的用户名,所以我想到是这样的:

SELECT * from user U, messages M, (select username as Sender from user U1, messages M1 where M1.sender_id= U1.id)as Sub where (M.sender_id OR M.receiver_id)=(select id from user where username = 'Guy1') group by M.id 

,但它不给我我需要什么,我怎么能达到什么样的我想要做什么?

在结果我需要的东西,如:

+-------+-------------------+------------------+ 
| text | receiver_Username | sender_Username | 
+-------+-------------------+------------------+ 
+0

选择用户名,receiver_id,SENDER_ID,从用户文本左连接信息on user.id = messages.receiver_id – morissette 2014-10-27 19:24:22

+0

select user,receiver_id,sender_id,来自用户的文本左加入user.id = messages.sender_id上的消息 – morissette 2014-10-27 19:24:47

+0

也许我没有很好地表达,我需要获取sender_id的用户名和receiver_id的用户名和文本。但只有用户=用户1 您发布的所有这些查询不会这样做 – 2014-10-27 20:02:40

回答

2

我觉得下面的查询会得到你需要与用户表连接两次邮件表中的结果。一个用于发送器和一个用于接收

SELECT messages.text,sender.username,receiver.username from messages 
    inner join user as sender on sender.id = messages.sender_id 
    inner join user as receiver on receiver.id = messages.receiver_id 
+0

谢谢。这实际上是工作(而不是所有其他答案),只是编辑添加用户部分,所以 'SELECT messages.text,sender.username as Sender,receiver.username as Receiver from messages inner join user as sender on sender.id = messages.sender_id inner join user as receiver.id = messages.receiver_id WHERE((sender.username or receiver.username)=“Guy”)' – 2014-10-27 20:35:30

+0

不用客气。 – geoandri 2014-10-27 20:41:16

0
SELECT U.username, M.receiver_id, M.sender_id, M.text 
FROM user U 
LEFT JOIN messages AS M ON U.id = M.sender_id 
1

也许我没有表达好,我需要得到receiver_id和文本的SENDER_ID和用户名的用户名。但只有在用户是用户1 =所有这些查询您发布并没有这样做 - 加布里埃尔Prestifilippo 6秒前

用户名和SENDER_ID的文字:

SELECT u.username, m.text FROM user AS u 
LEFT JOIN messages AS m ON u.id = m.receiver_id 
WHERE u.username = 'Some_User'; 
:receiver_id的

SELECT u.username, m.text FROM user AS u 
LEFT JOIN messages AS m ON u.id = m.sender_id 
WHERE u.username = 'Some_User'; 

用户名和文本

组合:

SELECT u.username, m.text, x.text FROM user AS u 
LEFT JOIN messages AS m ON u.id = m.receiver_id 
LEFT JOIN messages AS x ON u.id = x.sender_id 
WHERE u.username = 'User1' 
+0

谢谢,这完全是我的第二个查询,但我需要在一个查询中,以我在答案中写的格式得到1个结果。顺便说一下,谢谢你的回复 – 2014-10-27 20:10:49

+0

更新,是更好的? – morissette 2014-10-27 20:29:57

+0

谢谢,部分是正确的,但因为我需要两个用户名作为正确答案的结果我@geoandri – 2014-10-27 21:09:06