javascript 搜索2个表,并检查是否在搜索日期取汽车

hk8txs48  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(121)

好吧,所以我安静的新编码和我试图做一个汽车租赁系统,我停留在主页上,其中有搜索按钮,这是一个简单的日期选择器,在另一边,我有一个数据库,其中包含了X开始日期和X结束日期的X汽车的其他客户的当前预订。现在这里是棘手的部分。我收集了搜索开始日期&从输入字段中返回日期,并从预订数据库中收集开始和结束日期,我将它们进行比较,以检查输入日期是否大于/小于或等于预订日期,因此我跳过它,因为客户正在输入的搜索日期中查找汽车,如果日期等于或介于两者之间,则跳过此汽车。
现在,假设我认为我已经正确检查了日期,在预订表中,我保存了所选汽车的汽车ID,我想做的是显示输入日期可用汽车的详细信息,现在的问题是,预订和汽车是2个不同的表,我也不知道如何比较或检查,如果选择的汽车是在汽车列表上,它是采取了所有日期输入或它免费。这是我目前卡住的部分。
总的来说,如果我不够清楚,我想做什么。
搜索开始/返回日期-显示在输入日期可用的汽车-如果没有,则不显示。
这是我的代码

<!--Car Cover-->
<?php 
  if(isset($_POST['submit']))
  {
    $startDate = $_POST['pickupDate'];
    $returnDate = $_POST['returnDate'];

    $startDate = new DateTime($startDate);
    $returnDate = new DateTime($returnDate);
    $startDate = $startDate->format("m-d");
    $returnDate = $returnDate->format("m-d");
    if(empty($startDate))
    {
      $_SESSION['ErrorMessage'] = "Pickup Date can't be empty";
      TakeTo("index");
    }
    elseif(empty($returnDate))
    {
      $_SESSION['ErrorMessage'] = "Return Date can't be empty";
      TakeTo("index");
    }
    elseif($startDate == $returnDate)
    {
      $_SESSION['ErrorMessage'] = "Cars can only be rented for 1 or more days";
      TakeTo("index");
    }
    elseif($returnDate <= $startDate)
    {
      $_SESSION['ErrorMessage'] = "Return date cannot be before Pickup Date";
      TakeTo("index");
    }
    echo "Search Start Date : $startDate - Search End Date : $returnDate <br>";
    $sql = "SELECT * FROM reservations";
    $stmt = $con->query($sql);

    $sql2 = "SELECT * FROM cars";
    $stmt2 = $con->query($sql2);
    while($info = $stmt->fetch())
    {
      $Start = new DateTime($info['start_date']);
      $End = new DateTime($info['end_date']);
      $Start = $Start->format("m-d");
      $End = $End->format("m-d");
      $selectedCar = $info['selected_car'];
      while($carInfo = $stmt2->fetch())
      {
      
      if($carID == $selectedCar)
      {
        continue;
      }
        $carID = $carInfo['id'];
      $carName = $carInfo['car_name'];
      $product_year = $carInfo['production_year'];
      $engine = $carInfo['engine'];
     // print( "Start is :$Start - End is :$End - StartDate is :$startDate - Return Date is :$returnDate<br>");

      echo "Car Name : $carName - product_year : $product_year - engine : $engine  - Start Date : $Start - End : $End  - Car ID : $carID<br>";
      }
      if($Start == $startDate || $End == $returnDate ||$startDate >= $Start && $startDate <= $End || $startDate <= $Start && $startDate <= $End)
      {
        continue;
      }
      
      
    }

  }
 ?>
kmpatx3s

kmpatx3s1#

假设车辆只能在返回后的第二天提取,您需要:

select c.id,c.car_name,c.production_year,c.engine
from cars c
left join reservations r on
    r.selected_car=c.id and
    greatest(r.start_date,?) <= least(r.end_date,?)
where r.selected_car is null

(传递所需的开始日期和结束日期,格式为YYYY-MM-DD)。
请注意,您无法仅通过分别比较结束和开始来检测两个时间范围的重叠;你将错过一个范围完全在另一个范围内的情况。
左连接查找每辆车的预订,这将使它不可用;where条件排除存在这种预订的汽车。

相关问题