我有一个像这样的简单聊天数据库:
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
。from
更改为messages
。to
我会收到错误。
如何组合名字和名字?检索聊天记录时每个参与者的姓氏?
由于
答案 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