php - MySQL:加入三个表并连接分组结果

标签 php mysql database

我有以下三个表 'doctors' 、'specialities' 和 'doctor_specialities':

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

但在这种情况下,我得到的是单一专业。

最佳答案

您正在寻找的是一个名为 GROUP_CONCAT 的 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

关于 SQL Fiddle 的架构和查询

关于php - MySQL:加入三个表并连接分组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587292/

相关文章:

php - Laravel5 `RouteServiceProvider` `should be compatible with` 错误

php - 我应该使用哪种算法来查找数据库中的相似性?

javascript - 为同一事件的每次发生追加数据

MySQL插入数据时报错1452

php - 根据mysql cake php中传递的日期范围每周对数据进行分组

PHP 函数似乎半途而废

mysql - 如何在 mysql 长文本字段中查找 <CR><LF><LF> 的实例

mysql - SQL 查询 DATEDIFF 返回 NULL

database - 如何从 amazon dynamodb 导出数据库并导入到 redis?

php - 使用 PHP 扩展数据库中现有数据的最佳方法是什么