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