提问者:小点点

如果在两个日期之间的间隔内存在另一个两个日期的间隔,则进行搜索


我有一个间隔创建了2个日期。

2020年6月28日至2020年05/07

如果在此间隔中有添加到数据库中的日期,它会警告我在此间隔中有添加到数据库中的日期。

使用FullCalendar创建日期数据库。

如果在所选日期28/06/2020到05/07/2020之间不仅有一个日期,而且还有一个间隔,例如31/06/2020到03/07/2020,我也无法让它通知我

或者如果所选日期为:28/06/2020至05/07/2020,但在数据库中存在从26/06/20202至29/06/2020的间隔。

有可能做到这一点吗?

对于单个日期,不带间隔,并使用了以下内容:

$paymentDate=date('Y-m-d', strtotime("03/07/2020"));
$contractDateBegin = date('Y-m-d', strtotime("28/06/2020"));
$contractDateEnd = date('Y-m-d', strtotime("07/07/2020"));

if (($paymentDate >= $contractDateBegin) && ($paymentDate <= $contractDateEnd)){
    echo "is between";
}else{
    echo "NO GO!";  
}

bd完整日历。

    --
-- Table structure for table `events_laboral`
--

CREATE TABLE `events_laboral` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `color` varchar(7) DEFAULT NULL,
  `start` datetime NOT NULL,
  `end` datetime DEFAULT NULL,
  `empresa` text NOT NULL,
  `usuario` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `events_laboral`
--

bd间隔日期。

--
-- Table structure for table `vacanciones`
--

CREATE TABLE `vacanciones` (
  `id` int(255) NOT NULL,
  `empresa` text NOT NULL,
  `usuario` text NOT NULL,
  `fecha_inicio` text NOT NULL,
  `fecha_final` text NOT NULL,
  `fecha_peticion` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_cambio` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` text NOT NULL,
  `mesaje` longtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `vacanciones`
--

编辑:我在考虑php搜索两个选定的日期之间,如果有一个开始或结束日期的任何事件。 并且如果它给出了一个正的开始日期,则在所选间隔日期的开始和结束之间进行计算,通知用户所选的天数已经在数据库中。


共1个答案

匿名用户

请考虑以下事项:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(event_id CHAR(1)
,event_start DATE NOT NULL
,event_end DATE NOT NULL
,PRIMARY KEY(event_id)
);

INSERT INTO my_table VALUES
('A','2020-06-28','2020-07-05'),
('B','2020-06-26','2020-06-29'),
('C','2020-07-04','2020-07-05'),
('D','2020-07-06','2020-07-07');

SELECT x.* 
     , y.event_id clashes_with_event
  FROM my_table x 
  JOIN my_table y 
    ON y.event_id <> x.event_id 
   AND y.event_start <= x.event_end 
   AND y.event_end >= x.event_start;

+----------+-------------+------------+--------------------+
| event_id | event_start | event_end  | clashes_with_event |
+----------+-------------+------------+--------------------+
| B        | 2020-06-26  | 2020-06-29 | A                  |
| C        | 2020-07-04  | 2020-07-05 | A                  |
| A        | 2020-06-28  | 2020-07-05 | B                  |
| A        | 2020-06-28  | 2020-07-05 | C                  |
+----------+-------------+------------+--------------------+