Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:连接三个表并连接分组结果_Php_Mysql_Database - Fatal编程技术网

Php MySQL:连接三个表并连接分组结果

Php MySQL:连接三个表并连接分组结果,php,mysql,database,Php,Mysql,Database,我有以下三个表格“医生”、“专业”和“医生专业”: doctors -id -doctor_name specialities -id -speciality_name doctor_specialities -id -doctor_id -speciality_id 我想返回所有医生及其专业名称和专业id。一名医生可以有多个专业 结果集应类似于: id | doctor_name | speciality_id |

我有以下三个表格“医生”、“专业”和“医生专业”:

doctors 
-id
-doctor_name

specialities 
-id
-speciality_name

doctor_specialities 
-id
-doctor_id
-speciality_id
我想返回所有医生及其专业名称和专业id。一名医生可以有多个专业

结果集应类似于:

id       |       doctor_name       |       speciality_id       |       speciality_name
--------------------------------------------------------------------------------------
1        |       John              |       5,3                 |       Speciality1,Speciality2
3        |       Tim               |       3                   |       Speciality2
6        |       David             |       NULL                |       NULL
我尝试了以下查询:

SELECT d.id ,d.doctor_name, s.speciality_name, s.id
AS speciality_id
FROM api_doctors d
LEFT JOIN api_doctor_specialities ds
ON ds.doctor_id = d.id
LEFT JOIN api_specialities s
ON s.id = ds.speciality_id
GROUP BY d.id

但在本例中,我得到的是一个单独的特性。

您要查找的是一个调用的MySQL函数,它返回一个串联结果或NULL。默认分隔符是逗号,因此此查询的结果应与所需的结果集匹配

SELECT d.id, d.doctor_name, GROUP_CONCAT(s.speciality_name) AS speciality_name, GROUP_CONCAT(s.id) AS speciality_id
FROM api_doctors d
LEFT JOIN api_doctor_specialities ds
ON ds.doctor_id = d.id
LEFT JOIN api_specialities s
ON s.id = ds.speciality_id
GROUP BY d.id

模式和查询

您要查找的是一个名为MySQL的函数,它返回一个连接的结果或NULL。默认分隔符是逗号,因此此查询的结果应与所需的结果集匹配

SELECT d.id, d.doctor_name, GROUP_CONCAT(s.speciality_name) AS speciality_name, GROUP_CONCAT(s.id) AS speciality_id
FROM api_doctors d
LEFT JOIN api_doctor_specialities ds
ON ds.doctor_id = d.id
LEFT JOIN api_specialities s
ON s.id = ds.speciality_id
GROUP BY d.id

Schema and query on

1 select,with 2 join如果我不太清楚,我会说这是家庭作业。我希望任何教这门课的人都不会教人们这样设置表。我认为db表结构看起来很合适@DarylB,你认为它有什么问题吗?1 select,对于2个join,如果我不知道更多,我会说这是作业。我希望任何教这门课的人都不会教人们这样设置表。我认为db表结构看起来很合适@DarylB,你认为它有什么问题?