MySQL聊天表,加入用户名?

时间:2013-03-25 12:54:35

标签: mysql sql join

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

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`

一切正常,但如果我尝试添加其他加入,只需将messagesfrom更改为messagesto我会收到错误。

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

由于

2 个答案:

答案 0 :(得分:3)

看起来你想要同时收到发件人和收件人?如果是这样,这应该可以加入Users表两次:

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`

答案 1 :(得分:3)

您需要在表users上基本加入表messages两次,前提是您提供ALIAS来唯一标识具有相同表名的表。

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