我正在尝试编写一个允许用户预订项目的系统。 物品不能预订两次。因此,如果某个项目不可用,我想通过使用SQL来了解它。
我有一个包含以下字段的数据库 id,item,start(datetime),end(datetime)
用户将尝试从“01-01-2016 09:00”到“01-01-2016-22:00”预订项目。但是已经有一行开始是“01-01-2016 11:00”,结束是“01-01-2016 16:00”。所以..该项目不可用。
我如何在SQL中执行此操作?
现在我正在使用它:
SELECT * FROM `items` WHERE (`start` between '$start' and '$end') AND (`item` = $id)
然后我查看行数是否高于0.如果是,则该项目不可用。这可行..但不是在开始时间早于新的开始时间之前。
我希望我的解释很明确......很难处理这个问题,因为我无法直接了解事实。
答案 0 :(得分:0)
实际上,start
可能在新的开始时间之前。但是你还要检查end
是否也在间隔期间。同样对于评论案例,您必须检查是否存在较小的间隔。
按照以下方式展开您的查询:
SELECT * FROM `items` WHERE ((`start` between '$start' and '$end') OR (`end` between '$start' and '$end') OR (`start` >= '$start' and `end` <= '$end')) AND (`item` = $id)