首页 > 解决方案 > 如何检查两个日期之间是否存在条目

问题描述

我有一个 sql 表“航班”,其中包含所有航班的所有详细信息:飞机登记、到达日期、出发日期等等......现在当我想创建一个新航班时,我想检查一个航班在两个给定日期之间已经存在相同的注册。EG:有一个名为 IFLY 的航班于 2019 年 7 月 22 日抵达并于 2019 年 7 月 25 日起飞,现在如果我尝试创建另一个具有相同注册但于 23/7/2019 抵达并于 2019 年 7 月 24 日起飞的航班,我会喜欢在数据库中检查在这些日期期间另一个具有相同注册的航班已经在数据库中并提醒用户。

我尝试过这样的事情: html form via jquery/ajax call a request on the DB

$regist = $_POST['regCreate'];
$arrivalDate = $_POST['adof'];
$departureDate =$_POST['ddof'];

$sql = "SELECT reg FROM flights WHERE reg = '$regist' AND (adof or ddof) 
 >= '$arrivalDate' AND (adof or ddof) <= '$departureDate'  ";//
$data = mysqli_query($conn, $sql);

 if (mysqli_num_rows($data) > 0) {
  echo 'exists';
 }

此代码不起作用,因为如果我创建一个位于已创建的两个日期之间的新航班不会给我例外结果。

标签: phpjquerysql

解决方案


如果两个时间段每个都在另一个结束之前开始,则它们会重叠。

您可以将其表述为:

SELECT f.reg
FROM flights f
WHERE f.reg = ? and
      f.departureDate < ? and  -- the input arrival date
      f.arrivalDate > ?        -- the input departure date

请注意,我更改了语法以使用参数。这是在 PHP 或任何其他应用程序层中设计查询时的最佳实践。


推荐阅读