SQL 检查时间之间是否可用

SQL Check if available between times

我正在尝试编写一个让用户可以预订商品的系统。 项目不能被预订两次。因此,如果某个项目不可用,我想通过使用 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)