我有一个user
表,例如
userId
userName
我有一个message
表,例如
messageId
messageToId
messageFromId
messageContent
我正在尝试进行查询以提取消息,但也会根据messageToId
和messageFromId
从用户表中获取用户名。
之前我在表之间只有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的私人消息系统。
答案 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
因此,您将两次加入用户表,以获取特定邮件的两个用户。为此,您需要像使用to
和from
一样使用表别名,以便区分它们。
我还使用字段别名来单独获取用户名,例如:
`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