MySQL-一行中有多个值
我有以下表格: 表格用户:MySQL-一行中有多个值,mysql,Mysql,我有以下表格: 表格用户: id_user | name | job --------|------|---- 1 | John | Director 2 | Lila | Assistant 3 | Paul | Director 4 | Jude | Assistant 表格位置: id_site | city --------|------- 110 | Paris 111 | London 表格联系人: id_us
id_user | name | job
--------|------|----
1 | John | Director
2 | Lila | Assistant
3 | Paul | Director
4 | Jude | Assistant
表格位置:
id_site | city
--------|-------
110 | Paris
111 | London
表格联系人:
id_user | id_site | is_assistant | is_director
--------|---------|--------------|------------
1 | 110 | NULL | 1
2 | 110 | 1 | NULL
3 | 111 | NULL | 1
4 | 111 | 1 | NULL
让我解释一下。我公司有不同的用户表中的用户;公司在表站点中的不同位置,最后是将表用户与表站点关联起来的表联系人
我的问题是:
SELECT
site.*,
`assistant`.`job` AS "Assistant Job",`assistant`.`name` AS "Assistant name",
`directors`.`job` AS "Job director",`directors`.`name` AS "Director name"
FROM `site`
LEFT OUTER JOIN contact ON contact.id_site = site.id_site
LEFT OUTER JOIN `users` AS assistant ON `contact`.`id_user` = `assistant`.`id_user` AND `contact`.`is_assistant` = "1"
LEFT OUTER JOIN `users` AS directors ON `contact`.`id_user` = `directors`.`id_user` AND `contact`.`is_director` = "1"
ORDER BY site.id_site
查询很正常,但问题是我有如下结果:
id_site | city | Assistant Job | Assistant name | Job director | Director name
--------|--------|---------------|----------------|--------------|--------------
110 | Paris | NULL | NULL | Director | John
110 | Paris | Assistant | Lila | NULL | NULL
111 | London | NULL | NULL | Director | Paul
111 | London | Assistant | Jude | NULL | NULL
我希望所有信息都放在同一行上,而不是放在几乎相同的两行上。我想要一些像:
id_site | city | Assistant Job | Assistant name | Job director | Director name
--------|--------|---------------|----------------|--------------|--------------
110 | Paris | Assistant | Lila | Director | John
111 | London | Assistant | Jude | Director | Paul
我希望我说得够清楚了。你能帮我吗
多谢各位
Stefey如果您将两个
联系人
ID放在同一行,它应该可以工作。问题是,因为它连接到两行,并且连接到拆分的行。因此,如果您两次加入联系人表(为is_director
和is_assistant
添加了第二个子句),那么每个联系人表应该只有一个结果。然后加入各自的用户
表
SELECT
site.*,
`assistant`.`job` AS "Assistant Job",
`assistant`.`name` AS "Assistant name",
`directors`.`job` AS "Job director",
`directors`.`name` AS "Director name"
FROM
`site`
LEFT OUTER JOIN
`contact` AS ContactAssistant
ON ContactAssistant.id_site = site.id_site
AND ContactAssistant.is_assistant = "1" -- Add this clause here
LEFT OUTER JOIN
`contact` AS ContactDirector
ON ContactDirector.id_site = site.id_site
AND ContactDirector.is_director = "1" -- Add this clause here
LEFT OUTER JOIN
`users` AS assistant
ON ContactAssistant.`id_user` = `assistant`.`id_user`
-- AND `contact`.`is_assistant` = "1" -- No longer needed
LEFT OUTER JOIN
`users` AS directors
ON ContactDirector.`id_user` = `directors`.`id_user`
-- AND `contact`.`is_director` = "1" -- No longer needed
ORDER BY site.id_site
不相关,您的
是助理还是是主管字段(微小)INT
还是VARCHAR
?我假设它们是数字的,所以您可能希望确保将它们视为数字。看起来您需要调整结果。。如果您可以访问PHP,我认为您最好解决PHP中的数据显示问题,而不是SQL查询中的数据显示问题,正如对“重复问题”的回答所建议的那样。也就是说,这种方法也有很多例子。非常感谢!!!我只是根据我的查询对其进行了调整,这非常有效。is_助理和is_主管都是布尔值!再次感谢,太棒了!如果它解决了你的问题,请随意接受我的回答:)