我不确定您的所有 JOINS 会是什么,因为我不知道您的架构,但基于有限的信息,我相信这会有所帮助。
如果有一个如下所示的带有外键 PROVIDER_ID 的时隙表,它可能看起来像这样。我已经包含了 DATETIME 字段,因为如果插槽是 35 分钟或类似的时间,这些字段可能会在您尝试查询确切时间时帮助您。MySQL 带有一些 DATE 函数,可以帮助您,而不是在几分钟内尝试使用 FROM 和 TILL。(在这个例子中我已经离开了 FROM 和 TILL 但这些可能不需要)
给定下表:
表:time_slots
ID FROM TILL DAY FROM_TIME TO_TIME PROVIDER_ID
1 540 630 1 2015-01-03 09:00:00 2015-01-03 10:30:00 4
2 780 960 1 2015-01-03 13:00:00 2015-01-03 16:00:00 16
3 600 660 2 2015-01-03 10:00:00 2015-01-03 11:00:00 7
4 660 720 1 2015-01-03 11:00:00 2015-01-03 12:00:00 9
5 780 840 2 2015-01-03 13:00:00 2015-01-03 14:00:00 12
6 600 630 3 2015-01-03 10:00:00 2015-01-03 10:30:00 14
表:提供者
ID NAME
4 Provider 4
7 Provider 7
9 Provider 9
12 Provider 12
14 Provider 14
16 Provider 16
您可以使用以下可能的查询来获取时隙信息并显示提供者信息。在执行查询之前,您可以根据代码中的某些逻辑将 INTERVAL 类型及其值传递给查询。通过循环输入您的代码,您可以收集您目前感兴趣的所有时间段。
SELECT '60 Minute Slot', p.name, t.from_time, t.to_time, t.day
FROM time_slots t
JOIN providers p ON p.id = t.provider_id
WHERE DATE_ADD(from_time, INTERVAL 1 HOUR) = to_time
结果:
60 Minute Slot Provider 7 2015-01-03 10:00:00 2015-01-03 11:00:00 2
60 Minute Slot Provider 9 2015-01-03 11:00:00 2015-01-03 12:00:00 1
60 Minute Slot Provider 12 2015-01-03 13:00:00 2015-01-03 14:00:00 2
SELECT '30 Minute Slot', p.name, t.from_time, t.to_time, t.day
FROM time_slots t
JOIN providers p ON p.id = t.provider_id
WHERE DATE_ADD(from_time, INTERVAL 30 MINUTE) = to_time
结果:
30 Minute Slot Provider 14 2015-01-03 10:00:00 2015-01-03 10:30:00 3
您可以在此处查看 MySQL DATE 函数:
MySQL 日期函数