MySQL:查找具有冲突日期范围的行

MySQL:查找具有冲突日期范围的行

问题描述:

我正在为我们的网站撰写广告预订系统。广告以StartDateEndDate字段进行预订,以指示他们在线多长时间。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 

我没有占优势的情况下开始和结束日期是平等的,因为我不知道你的规则是这一点。

+0

这看起来像解决方案 - 我发誓我试着开始,猜测我的逻辑困惑。谢谢!我的开始/结束日期的规则是相同的,但是这个代码无论如何都会迎合这种情况 - 它会返回1行。谢谢! – 2010-04-26 12:34:35