Mysql:链接2个表与2个不同的字段


mysql: linking 2 tables with 2 different fields

我有一个user表,例如

userId
userName

和我有一个message表,例如

messageId
messageToId
messageFromId
messageContent

我正试图进行查询以拉消息,但也根据messageToIdmessageFromId从用户表中获取用户名。

我以前在表之间只有一个字段时这样做过,例如

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

但是我有两个链接有问题。

我想要的结果如下:

messageId
messageToId
toUserName
messageFromId
fromUserName
messageContent

任何帮助将非常感激,或者如果有人有另一种方法尝试使用PHP/MySQL的私人消息系统

你只需要使用连接和不同的表别名:

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";

您需要使用join from来实现这一点:

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`

这样行吗?

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