我有一个user
表,例如
userId
userName
和我有一个message
表,例如
messageId
messageToId
messageFromId
messageContent
我正试图进行查询以拉消息,但也根据messageToId
和messageFromId
从用户表中获取用户名。
我以前在表之间只有一个字段时这样做过,例如
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
因此,针对用户表进行两次连接,以获取特定消息的两个用户。要做到这一点,您需要使用表别名,就像我对to
和from
所做的那样,以便您区分它们。
我还使用了字段别名来分别获取用户名,例如:
`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