好的......所以我在使用CodeIgniter构建的自定义PHP应用程序中有一个日历,它从MySQL数据库中提取其条目。在包含条目数据的表格中,有3个字段用于管理日期( start_date ),时间( start_time )和持续时间(持续时间)的条目。现在,当最终用户将条目移动到新的日期和/或时间时,系统需要检查这3个字段是否存在任何计划冲突。
以下是查询中使用的一些变量:
$request_entry_id // the id of the entry being moved
$request_start_date // the requested new date
$request_start_time // the requested new time
$request_duration // the duration of the entry being moved (will remain the same)
$end_time = ($request_start_time + $request_duration); // the new end time of the entry being moved
用于检查计划冲突的我的查询是:
SELECT t.id
FROM TABLE t
WHERE t.start_date = '$request_start_date'
AND (j.start_time BETWEEN '$request_start_time' AND '$end_time'))
AND t.id <> $request_entry_id
上述查询将检查在与请求相同的日期和时间开始的任何条目。但是,我还想检查以确保新请求不会以最有效的方式(现有技巧)落入现有条目的持续时间内。有什么建议?提前谢谢!
答案 0 :(得分:1)
如果你第一次考虑没有冲突时的条件,就更容易找出逻辑:
新活动结束 现有活动开始,或在现有活动结束后结束。
如果发生冲突,我们会对上述内容产生负面影响:
新活动结束 现有活动开始后,和开始 现有活动结束。
在SQL中:
SELECT t.id
FROM TABLE t
WHERE t.start_date = '$request_start_date'
AND ('$end_time' > t.start_time AND '$request_start_time' < addtime(t.start_time, t.duration))
AND t.id <> $request_entry_id