Mysql SQL在两者之间进行选择?
我正在为一个朋友做一个假期预订系统 当他进入假期时,我需要检查日期是否已经被使用,如果已经被使用,那么显然无法创建预订 我目前正在使用:Mysql SQL在两者之间进行选择?,mysql,sql,Mysql,Sql,我正在为一个朋友做一个假期预订系统 当他进入假期时,我需要检查日期是否已经被使用,如果已经被使用,那么显然无法创建预订 我目前正在使用: SELECT * FROM anqehxy1kxmeowpcoqjj WHERE `from` BETWEEN '2013-01-16' AND '2013-01-23' SELECT * FROM anqehxy1kxmeowpcoqjj WHERE `to` BETWEEN '2013-01-16' AND '2013-01-23' 看看我是否
SELECT *
FROM anqehxy1kxmeowpcoqjj
WHERE `from` BETWEEN '2013-01-16' AND '2013-01-23'
SELECT *
FROM anqehxy1kxmeowpcoqjj
WHERE `to` BETWEEN '2013-01-16' AND '2013-01-23'
看看我是否可以预订2013-01-16到2013-01-23的假期
数据库中已经有2013-01-15至2013-01-22的预订,这意味着我尝试预订的日期已经被预订;但是,sql返回0行,除非我使用的日期与已经使用的日期完全相同
有没有办法解决这个问题
值得注意的是,人们在上午10点离开,下一个人在下午2点到达
因此,如果连续两周被预订,看起来
2013-01-14 -> 2013-01-21
2013-01-21 -> 2013-01-28
不能像在第二次查询中那样反转日期。换成
SELECT *
FROM anqehxy1kxmeowpcoqjj
WHERE `to` BETWEEN '2013-01-16' AND '2013-01-23'
附带说明:您的表名真的是
anqehxy1kxmeowpcoqjj
要获得两个日期,如果它们与任何日期冲突,我使用如下查询。此查询将返回冲突的日期。如果没有返回行,这意味着特定的时隙是空闲的@开始时间和结束时间是您要预订的日期的参数
select * from anqehxy1kxmeowpcoqjj
where((@end_time > `from` and @end_time <= `to`) or
(@start_time >= `from` and @start_time < `to`) or
(@start_time <= `from` and @end_time >= `to`))
从anqehxy1kxmeowpcoqjj中选择*
其中(@end\u time>`from`和@end\u time=`from`和@start\u time<`to`)或
(@start\u time=`to`)
我认为最简单的方法是:
select *
from anqehxy1kxmeowpcoqjj
where @end_time >= `to` and @start_time <= `from`
选择*
来自anqehxy1kxmeowpcoqjj
其中@end_time>=`to`和@start_time您的日期存储为什么?日期存储方式如下:2013-01-14您是将日期存储为一个范围还是将日期存储为每天都有一个单独的条目?例如,对于1-16到1-23,是db中的1个条目还是8个条目?问题是如果您查看他的到查询,他的日期顺序错误…更新了我的问题,修复了初始问题。请检查我的编辑此修复了我最初的问题,但是它导致了另一个问题,如我的编辑中所述抱歉,我无法理解新问题。你能补充更多细节吗?新问题真的很简单。将被预订的房间在假期的最后一天被腾空,打扫干净,然后下一组人(在同一天)进入。由于第一周的最后一天与第二周的第一天冲突,因此您给我的SQL目前无法实现这一点。我希望如此helps@Ryuk好吧,我很困惑,因为我认为你的16-23
范围仍然适用于第二种情况。所以你不能使用BETWEEN,你需要像WHERE`to`>'2013-01-21'和`to`这不是正确答案。。查看bfavaretto
answer以获得一个好的示例dj_KRAZE,虽然bfavaretto的答案解决了我最初的问题,但这两个答案都不能解决我的编辑中描述的问题。@DJKRAZE这不是一种通过单个查询来解决它(最初的问题)的方法吗?我的答案基于OP的两个查询方法。他的答案在某些情况下不起作用。。假设说“from”是“2013-01-16”,而“to”是“2013-01-23”。而人们想要检查的日期是在2013-01-18和2013-01-20之间@bfavaretto你的答案是正确的看看评论的目标是谁这是ajp提供的答案。。请再看看我写的东西:)