查询一段时间之间的时间段

时间:2013-09-07 15:54:31

标签: 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的日期期间进行搜索时,我会在所有字段中收到空。

很抱歉,但我不能在此处放置图片,因为我没有很多声望点。

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

1 个答案:

答案 0 :(得分:1)

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

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;

编辑:

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

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;