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