mysql - SQL 检查时间之间是否可用

标签 mysql datetime between

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

相关文章:

MySQL - 对每个 col 中最常见的数字求和,显示 col 总和在 185 到 215 之间的结果

php - 来自不同表的上一年记录

MySQL - TIMESTAMP 字段类型自动转换为 UTC?

mysql - 使用mysql中的触发器计算BLOB大小

比较字符串和 strftime 值时,运算符中的 Python 无法按预期工作

Java如何从字符串中生成日期

asp.net - NodaTime 转换(第 2 部分)。如何?

sql-server - sql : BETWEEN v1 AND v2

MySQL 定义数据库列