我一直在尝试为会议室做一个日计划。我有两个表:
1) dayplanner
: day以5分钟为间隔值=就是00:05:00 00:10:00…23:55:00
2) reservations
:名称、开始和结束值=[约翰,12:00:00 12:30:00],[鲍勃,14:00:00 14:45:00]等
我的目标是使用一个查询和两个IF语句,这样我就可以检查开始时间和
之间的内容。:
[Time] [in - between]
12:00:00 true true
12:05:00 true true
............................
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';";
查询在reserd_column中只给出一个true,但是什么都不起作用。我希望你能帮助我。
您正在将您的时间间隔与开始或结束的预订匹配在该间隔上。根据定义,如果时间相等,则它们不能大于或小于自身,这意味着您要明确地忽略与该时间间隔不完全匹配的预订。
比较应该是
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时,所有不为空的内容都意味着它们匹配WHERE子句。这就是为什么当reservations start为空时,我只说in_between为假。
效果很好现在来看看如何填充