我正在尝试编写一个让用户预订元素的系统。 商品不能重复预订。因此,如果某个项目不可用,我想通过使用 SQL 来知道。
我有一个包含以下字段的数据库 id,项目,开始(日期时间),结束(日期时间)
用户将尝试在“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。如果是,则该项目不可用。这有效..但当开始时间早于新的开始时间时则无效。
我希望我的解释很清楚......很难处理这个问题,因为我无法弄清楚事实。
最佳答案
事实上,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)
关于mysql - SQL 检查时间之间是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497172/