mysql - 查询一个时间段之间的时间段

标签 mysql database algorithm

我有一个 PHP 页面,它向用户显示一个日历,以便能够选择与将分配的项目相匹配的开始期间和结束期间。

但在我分配所选时间段内的用户之前,我需要查看数据库是否已经分配。

我有一个表,用于存储某些项目中资源的分配数据。您可以在下面查看表格和代码。

SELECT * FROM ALLOCATION 
WHERE dt_starting >= STR_TO_DATE('2013-09-02', '%Y-%m-%d') 
AND dt_ending <= STR_TO_DATE('2013-09-06', '%Y-%m-%d') 
AND id_res = 1;

id_alloc id_pro id_res  dt_starting dt_ending
----------
1    1  1   2013-09-02  2013-09-06  
2    2  1   2013-09-03  2013-09-04  
----------

但是,当我尝试使用从 2013-09-05 到 2013-09-05 甚至从 2013-08-31 到 2013-09-03 的日期期间进行搜索时,我在所有字段中都收到 null。

抱歉,我没法在这里放图片,因为我的声望点数不多。

当然这是一个逻辑问题,但它让我发疯。

最佳答案

我认为你的逻辑是倒退的,如果你想要列值之间的常量:

SELECT *
FROM ALLOCATION
WHERE dt_starting <= STR_TO_DATE('2013-09-02', '%Y-%m-%d') AND
      dt_ending >= STR_TO_DATE('2013-09-06', '%Y-%m-%d') AND
      id_res = 1;

编辑:

如果您正在寻找时间段之间的重叠,那么逻辑是一个在另一个结束之前开始,并且第一个在第二个 neds 之后结束:

SELECT *
FROM ALLOCATION
WHERE dt_starting <= STR_TO_DATE('2013-09-06', '%Y-%m-%d') AND
      dt_ending >= STR_TO_DATE('2013-09-02', '%Y-%m-%d') AND
      id_res = 1;

关于mysql - 查询一个时间段之间的时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675129/

相关文章:

php - 尝试使用 PHP 将值插入 MYSQL 表 - 未选择数据库

c# - C# 桌面应用程序的最佳数据库是什么? (没有网络)

mysql - 复杂的 SQL 表关系?

algorithm - 用当前lat/long/alt +在x,y,z上的运动计算对象的lat/long/alt值

PHP MySQL 数据库测试

mysql - Windows自行关闭后,我无法在xampp上运行mysql

mysql - 序列化 findAll 和 Join 表

python - 我无法将 mongodb 与 django 连接

algorithm - 状态机适合解决什么样的问题?

algorithm - 如何存储和收集最近24小时、最近7天、最近30天、最近365天浏览次数最多的信息来挖掘?