gpt4 book ai didi

mysql - mysql从多个表中获取数据,逗号分隔

转载 作者:行者123 更新时间:2023-11-30 21:46:50 24 4
gpt4 key购买 nike

我有3个表如下医生

CREATE TABLE `doctors` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`last_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`phone_number` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`avatar_path` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`qualification` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `doctors_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

专长

CREATE TABLE `specializations` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint(4) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

以及这两个表中的多对多

CREATE TABLE `doctor_specialization` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`doctor_id` int(10) unsigned NOT NULL,
`specialization_id` int(10) unsigned NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `doctor_specialization_doctor_id_foreign` (`doctor_id`),
KEY `doctor_specialization_specialization_id_foreign` (`specialization_id`),
CONSTRAINT `doctor_specialization_doctor_id_foreign` FOREIGN KEY (`doctor_id`) REFERENCES `doctors` (`id`),
CONSTRAINT `doctor_specialization_specialization_id_foreign` FOREIGN KEY (`specialization_id`) REFERENCES `specializations` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

现在我希望查询从 doctor 获取结果,如果超过 1,则用逗号分隔特化。

有什么办法可以用mysql的方式实现吗?或者我必须对每个结果集执行 php 循环

最佳答案

您可以使用 MySQL 内置函数 - GROUP_CONCAT

SELECT  d.first_name,
d.last_name,
GROUP_CONCAT(s.name) AS `specializations`
FROM doctors d
INNER JOIN doctor_specialization ds
ON d.id = ds.doctor_id
INNER JOIN specializations s
ON ds.specialization_id = s.id
GROUP BY d.first_name, d.last_name

关于mysql - mysql从多个表中获取数据,逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com