我有一个表Appointments
,它有start_date,end_date,cabinet_id,以及通过连接表与专家的多对多关系。基本上,我需要获得约会之间的所有空闲插槽,其中cabinet_id是精确的,并给出了多个专家ID。对于免费插槽,我编写了查询,通过cabinet_id查找空闲插槽,但不知道如何修改查询以根据多对多查询选择空闲时间。
Basicaly我需要找到所有专家免费的免费插槽,cabinet_id也是免费的。
我目前对免费插槽的查询:
SELECT
a.cabinet_id,
a.end_time AS 'Unused From',
Min(b.start_time) AS 'Until'
FROM `Appointment` AS a
JOIN `Appointment` AS b ON a.cabinet_id=b.cabinet_id AND a.end_time <= b.start_time
WHERE a.cabinet_id = 4
GROUP BY a.end_time
HAVING a.end_time < MIN(b.start_time)
ORDER BY cabinet_id
表结构:
CREATE TABLE `Appointment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cabinet_id` int(11) DEFAULT NULL,
`patient_id` int(11) DEFAULT NULL,
`start_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_78A47793D351EC` (`cabinet_id`),
KEY `IDX_78A477936B899279` (`patient_id`),
CONSTRAINT `FK_78A477936B899279` FOREIGN KEY (`patient_id`) REFERENCES `Patient` (`id`),
CONSTRAINT `FK_78A47793D351EC` FOREIGN KEY (`cabinet_id`) REFERENCES `Cabinet` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=338 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `appointment_specialist` (
`appointment_id` int(11) NOT NULL,
`specialist_id` int(11) NOT NULL,
PRIMARY KEY (`appointment_id`,`specialist_id`),
KEY `IDX_BB6E783EE5B533F9` (`appointment_id`),
KEY `IDX_BB6E783E7B100C1A` (`specialist_id`),
CONSTRAINT `FK_BB6E783E7B100C1A` FOREIGN KEY (`specialist_id`) REFERENCES `Specialist` (`id`) ON DELETE CASCADE,
CONSTRAINT `FK_BB6E783EE5B533F9` FOREIGN KEY (`appointment_id`) REFERENCES `Appointment` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `Specialist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`profession` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(11) DEFAULT NULL,
`color` varchar(7) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_8D7A4924A76ED395` (`user_id`),
CONSTRAINT `FK_8D7A4924A76ED395` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;