2011-12-02 82 views
0

我有一個user表,例如,mysql:連接2個表格與2個不同的字段

userId 
userName 

和我有一個message表,例如,

messageId 
messageToId 
messageFromId 
messageContent 

我試圖做一個查詢,以便從基於的messageToIdmessageFromId用戶表中提取消息,但也得到了用戶名。

我之前完成了這個工作,表之間只有1個字段,例如,

SELECT message.*, user.userName 
    FROM message, user 
WHERE user.userId = message.messageToId 
    AND messageId = (whatever) 

但我有2個鏈接的問題。

我想要的結果如下:

messageId 
messageToId 
toUserName 
messageFromId 
fromUserName 
messageContent 

任何幫助將不勝感激,或者如果有人試圖用PHP/MySQL的私人信息系統的另一種方法。

回答

4

您只需要使用joins和不同的表別名:

SELECT m.*, u1.userName AS toUserName, u2.username AS fromUserName 
FROM message m INNER JOIN user u1 ON m.messageToId = u1.userId 
    INNER JOIN user u2 ON m.messageFromId = u2.userId 
WHERE messageId = "XXX"; 
0

將這項工作?

SELECT b.userName AS author, c.userName AS reciever, a.messageId, a.messageContent FROM message a JOIN user b ON a.messageFromId = b.userId JOIN user c ON a.messageToId = c.userId 
1

您需要使用一個連接從實現這一目標:

SELECT `m`.*, 
     `to`.`userName` AS `to`, 
     `from`.`userName` AS `from`, 
FROM `message` `m` 
JOIN `user` `to` ON `m`.`messageToId` = `to`.`userId` 
JOIN `user` `from` ON `m`.`messageFromId` = `from`.`userId` 
WHERE `m`.`messageId` = 1 

所以你加入對用戶表兩次獲得兩個用戶特定消息。要做到這一點,你需要使用表別名,因爲我已經使用tofrom,以便區分它們。

我也用一個字段別名分別得到他們的用戶名如:

`to`.`username` AS `from`