0

我有一个 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 。

抱歉,我无法在此处放置图片,因为我的声望点数不多。

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

4

1 回答 1

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;

编辑:

如果您正在寻找时间段之间的重叠,那么逻辑是一个在另一个结束之前开始,第一个在第二个 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;
于 2013-09-07T15:56:33.153 回答