Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询,选择日期范围内不包括日期间隔的所有记录_Mysql_Sql - Fatal编程技术网

MySQL查询,选择日期范围内不包括日期间隔的所有记录

MySQL查询,选择日期范围内不包括日期间隔的所有记录,mysql,sql,Mysql,Sql,我的MySQL表是这样的 TOURS | id | date_active_from | date_active_to | 1 | 2017-01-01 | 2017-12-31 | 2 | 2017-06-01 | 2017-09-15 | 3 | 2017-07-01 | 2017-10-20 | 4 | 0000-00-00 | 0000-00-00 我有两个选择字段来搜索在特定时间范围内活动的旅游 SELECT * FROM tours WHERE ( ( date_active_f

我的MySQL表是这样的

TOURS 
| id | date_active_from | date_active_to
| 1 | 2017-01-01 | 2017-12-31
| 2 | 2017-06-01 | 2017-09-15
| 3 | 2017-07-01 | 2017-10-20
| 4 | 0000-00-00 | 0000-00-00
我有两个选择字段来搜索在特定时间范围内活动的旅游

SELECT *
FROM tours
WHERE ( ( date_active_from <= userdatefrom OR date_active_from = '0000-00-00' ) AND ( date_active_to >= userdateto OR date_active_to = '0000-00-00' ) )

我如何查询不包括巡更处于非活动状态的时间间隔?

而不是将其拆分为两个“where”子句,使用BETWEEN是inclusive。非活动日期不一定是值,因为它们可以作为活动日期的排除项进行计算。如果“非活动”日期在活动时间范围内,则不成立,在这种情况下,您可以创建排除,或者创建具有更细粒度活动日期的其他行。在任何一种情况下,添加这些列都不是解决这个问题的好方法。很明显,这张桌子是一个小孩。这意味着您可以有许多日期的子记录?要决定活动/非活动,我们需要一个包含这两个时间间隔的时间范围。您的标准是2017年的整个日历年吗?如果是这样的话,id 1将没有非活动期?我编辑了我的问题,因为有些旅行可以始终处于活动状态,并且没有起始/截止日期。我还添加了一个日期间隔除外的示例,巡演2在2017-06-01至2017-09-15期间提供,但在2017-06-10至2017-06-20期间不提供。巡演1、3和4没有非活动期。这真是令人困惑。如何确定ID是否具有有效值?你需要做数学计算才能弄清楚,还是从另一个数据库中提取这些数据?例如:ID1有一整年处于活动状态,因此没有任何非活动值(表示0)。如果您的非活动值基于2017年的日历年,这将是有意义的。但ID3在3个月内具有活动值,但notactive值也为0。这是为什么?是城市旅游,用户有一个表单,其中插入了他在城里的时间间隔。Notactive time interval是一个新的请求,并且尚未包含在表中,完成此操作的唯一方法可能是添加一个子表。城市旅游:1个在2017-01-01至2017-12-31期间提供,2个在2017-06-01至2017-09-15期间提供,但在2017-06-10至2017-06-20期间暂停,3个在2017-07-01至2017-10-20期间提供,4个全年都可提供。
| id | date_active_from | date_active_to | date_notactive_from | date_notactive_to
| 1 | 2017-01-01 | 2017-12-31 | 0000-00-00 | 0000-00-00 | 
| 2 | 2017-06-01 | 2017-09-15 | 2017-06-10 | 2017-06-20 |
| 3 | 2017-07-01 | 2017-10-20 | 0000-00-00 | 0000-00-00 |
| 4 | 0000-00-00 | 0000-00-00 | 0000-00-00 | 0000-00-00 |