我一直在努力为会议室制作一个日计划员。 我有两张桌子:
1)dayplanner
:每隔5分钟分开一天
值= 00:00:00,00:05:00,00:10:00 ...... 23:55:00
2)reservations
:姓名,开始和结束
值= [约翰,12:00:00,12:30:00],[鲍勃,14:00:00,14:45:00]等
我的目标是使用一个带有两个IF语句的查询,这样我就可以检查开始时间和它们之间的内容
像这样:
[时间] [保留] [中间]
12:00:00真的是真的 12:05:00真的是真的 ............................
12:35:00 false false
$query = "SELECT *,
IF(d.dayplanner_time = a.reservations_starttime,'true','false') AS reserved,
IF(d.dayplanner_time > a.reservations_start && d.dayplanner_time < a.reservations_finish,'true','false') AS inbetween
FROM dayplanner d
LEFT JOIN reservations a
ON d.day_time = a.reservations_start OR d.dayplanner_time = a.reservations_finish
WHERE d.dayplanner_time BETWEEN '12:00:00' AND '18:00:00';";
查询在reserverd列中只提供一个true但没有任何效果。 我希望你能帮助我。
答案 0 :(得分:1)
您的时间间隔与在该时间间隔内开始或结束完全的预订相匹配。根据定义,如果时间相等,则它们不能大于或小于它们自己,这意味着您明确地忽略了与该时间间隔不完全匹配的预留。
比较应该是
SELECT d.dayplanner_time,d.day_time,
IF(d.dayplanner_time = a.reservations_starttime,'true','false') AS reserved,
IF(a.reservations_start is null, false, true) AS inbetween
FROM dayplanner d
LEFT JOIN reservations a
ON (d.day_time >= a.reservations_start AND d.dayplanner_time <= a.reservations_finish)
WHERE d.dayplanner_time BETWEEN '12:00:00' AND '18:00:00';
这意味着“如果至少有一个预订在我之前开始,和在我之前结束,那么介于两者之间”。
请记住,在执行LEFT JOIN时,所有非null都意味着它们与WHERE子句匹配。这就是为什么我只说保留开始时in_between是假的。
答案 1 :(得分:0)
工作正常 现在弄清楚我如何填补
之间的空间