1

我有一个像这样的简单聊天数据库:

id | from | to | message
---|------|----|-----------------
1  | 1    | 2  | hello
2  | 1    | 2  | are you there?
3  | 2    | 1  | yes I'm here!

还有第二个表,其中包含名称

`users`.`firstname` and `users`.`lastname`

我正在尝试将两者结合起来,因此在检索聊天时,我也会有两个参与者的姓名。我的查询现在看起来像这样:

SELECT 
  `messages`.*, 
  CONCAT(`users`.`firstname`, " ", `users`.`lastname`) as `nameFrom`     
FROM `messages`     
  INNER JOIN 
     `users` ON `messages`.`from` = `users`.`id`

它工作正常,但如果我尝试添加另一个连接,只需更改messages. frommessages. to我得到错误。

检索聊天记录时如何合并每个参与者的名字和姓氏?

谢谢

4

2 回答 2

3

看起来您正在尝试同时获取发送者和接收者?如果是这样,这应该可以加入用户表两次:

SELECT 
  `messages`.*, 
  CONCAT(u.`firstname`, " ", u.`lastname`) as `nameFrom`,
  CONCAT(u2.`firstname`, " ", u2.`lastname`) as `nameTo`
FROM `messages`     
  INNER JOIN 
     `users` u ON `messages`.`from` = u.`id`
  INNER JOIN 
     `users` u2 ON `messages`.`to` = u2.`id`
于 2013-03-25T12:57:54.373 回答
3

如果您提供唯一标识具有相同表名的表,则基本上需要在表上连接表users两次。messagesALIAS

SELECT  messages.*, 
        CONCAT(a.firstname, ' ', a.lastname) as nameFrom,
        CONCAT(b.firstname, ' ', b.lastname) as nameTo  
FROM    messages     
        INNER JOIN users a
            ON messages.from = a.id
        INNER JOIN users b
            ON messages.to = b.id
于 2013-03-25T12:57:59.707 回答