我有一个可用时间的MySQL表:
ID from till day
1 540 720 1
2 780 960 1
...
从和到晚时间只是午夜的分钟,例如9AM = 9 * 60 = 540等等。
不同提供商的from
和till
时间可能会有所不同,时间也可能不同。
我需要做的是创建一个查询,将此表中的结果分成时间段。
例如,一个时间段为60分钟,结果应如下所示:
from till day
540 600 1
600 660 1
660 720 1
780 840 1
...
你对我在MySQL中如何做到这一点有所了解吗?
提前致谢。
答案 0 :(得分:0)
我会创建一个包含一天所有时段的表格。它看起来像这样:
CREATE TABLE time_slots (
time_slot_id INT(11) AUTO_INCREMENT,
start_time INT(11),
end_time INT(11)
);
您的查询将如下所示:
SELECT ts.start_time, ts.end_time, avt.day
FROM available_times AS avt
JOIN time_slots ts
ON avt.from <= ts.end_time AND avt.till >= ts.start_time
ORDER BY ts.start_time;
答案 1 :(得分:0)
由于我不了解您的架构,我不确定您的所有联接会是什么,但基于有限的信息,我相信这会有所帮助。
如果有一个时隙表,如下所示,外键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功能: