我正在为我们的网站编写广告预订系统.广告使用StartDate
和EndDate
字段预订,以表明他们在线的时长.
添加新广告时,我会进行快速验证检查,以确保新广告不会与预订到同一位置的现有广告冲突.
我以为我有这个查询:
SELECT *
FROM adverts
WHERE EndDate >= '2010-04-22'
AND StartDate < '2010-04-22'
Run Code Online (Sandbox Code Playgroud)
2010-4-22是StartDate
我要预订的新广告.已经预订的广告StartDate
是2010-04-26,2010-05-09 EndDate
.
这些是具有不同日期的查询结果:
尝试在现有广告结束后预订广告:返回0行(正确)
尝试在现有广告的日期范围内预订广告开始和结束:返回1行(正确)
尝试在现有广告开始之前预订广告开始和结束:返回0行(正确)
尝试在现有广告开始之前预订广告,并在现有广告的日期范围内持续投放:返回0行(不正确)
尝试预订广告从BEFORE开始并在当前广告结束后结束:返回0行(不正确!)
有没有人有任何想法如何重写这个查询所以我可以确保它只在日期范围内发现冲突?
谢谢,马特
SELECT *
FROM adverts
WHERE `EndDate` >= :AdStartDate
AND `StartDate` <= :AdEndDate
Run Code Online (Sandbox Code Playgroud)
我没有考虑开始和结束日期相等的边缘情况,因为我不知道你的规则是什么.