mysql:链接2个表和2个不同的字段

时间:2011-12-02 15:17:06

标签: php mysql

我有一个user表,例如

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的私人消息系统。

3 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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`

答案 2 :(得分: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