我有一个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的日期期间进行搜索时,我会在所有字段中收到空。
很抱歉,但我不能在此处放置图片,因为我没有很多声望点。
当然这是一个逻辑问题,但它让我发疯。
答案 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;