MySQL:查找具有冲突日期范围的行
问题描述:
我正在为我们的网站撰写广告预订系统。广告以StartDate
和EndDate
字段进行预订,以指示他们在线多长时间。MySQL:查找具有冲突日期范围的行
添加新广告时,我有一个快速验证检查,以确保新广告不会与预订到同一位置的现有广告发生冲突。
我认为我与此查询过它:
SELECT *
FROM adverts
WHERE EndDate >= '2010-04-22'
AND StartDate < '2010-04-22'
2010-4-22是StartDate
新广告我想预订。有一个广告已经预订,其中StartDate
是2010-04-26,EndDate
是2010-05-09。
这些是不同日期查询的结果:
尝试预订广告开始在现有的广告结束后:返回0行(正确)
尝试预订在现有广告的日期范围内开始和结束的广告:返回1行(正确)
尝试预订广告的开始和结束前的现有广告开始:返回0行 (正确)
先试现有的广告开始,经久不衰在现有广告的日期预订开始广告范围:返回0行(不正确)
尝试预订出发前和结束后,当前广告结尾的广告:(!不正确的)返回0行
有没有人有任何想法如何重写这个查询,所以我可以确保它只会在日期范围内发生冲突?
谢谢, 马特
答
SELECT *
FROM adverts
WHERE `EndDate` >= :AdStartDate
AND `StartDate` <= :AdEndDate
我没有占优势的情况下开始和结束日期是平等的,因为我不知道你的规则是这一点。
这看起来像解决方案 - 我发誓我试着开始,猜测我的逻辑困惑。谢谢!我的开始/结束日期的规则是相同的,但是这个代码无论如何都会迎合这种情况 - 它会返回1行。谢谢! – 2010-04-26 12:34:35