2014-10-27 214 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