在这里,我正在做出租车分配模块,在这里我将解释我的要求,管理员按班次分配出租车给员工。此详细信息存储在cab_allocation分配表中。


  cab_allocation(表名称)


allocationId          cabId    shiftTiming    from_allocationDate  to_allocationdate
1                     CBX100     1             2017-08-10             2017-08-20
2                     CBX100     2             2017-08-10             2017-08-20
3                     CBX101     3             2017-08-10             2017-08-20


在此,cabId CBX100每天分配两次,而CBX101每天分配一次。在此之后,我想跟踪这次旅行是否发生,对于此跟踪详细信息,我将其存储在trip_details表中


  trip_details(表名)


tripId    cabNo    shiftId   tripDate   startTime   endTime    tripStatus

 1       CBX100      1       2017-08-16  09:30:00    11:30:00       1
 2       CBX100      2       2017-08-16  12.10.00                   0


此处cabId CBX100已完成其shiftId 1,shiftId的开始时间为09:30:00,结束时间为11:30:00,并且tripStatus 1表示此行程已完成。

下一个cabId CBX100已开始第二班次,开始时间为12.10.00,但此行程未完成,因此没有结束时间和行程状态

下一个cabId CBX101尚未开始旅行,因此该表没有任何条目,

现在我的预期结果是行程不完整,我想详细说明一下出租车分配。在这里,cab_allocation表分配ID我正在使用trip_details表tripId的外键。


  我试过这样


    $sql = "SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a INNER JOIN trip_details as b ON a.allocationId = b.tripId where b.tripStatus != '1' and b.tripDate != '".$date."' UNION SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a LEFT JOIN trip_details as b ON a.allocationId = b.tripId where b.tripId IS NULL";

  $mysql = mysql_query($sql);
  $count =mysql_num_rows($mysql);
  if($count > 0){
      while ($row = mysql_fetch_assoc($mysql)) {

        $data[] = $row;

      }
  $arrayName = array('status' => 'success', 'count' => $count, 'data' =>$data);
  echo json_encode($arrayName);
 } else {
    $arrayName = array('status' => 'error', 'data' =>'Data not found' );
    echo json_encode($arrayName);
 }



  我得到结果


{
"status": "success",
"count": 2,
"data": [
    {
        "allocationId": "2",
        "date": "2017-08-12",
        "shiftTiming": "2",
        "cabId": "CBX100"
    },
    {
        "allocationId": "3",
        "date": "2017-08-12",
        "shiftTiming": "3",
        "cabId": "CBX101"
    }
]
}


到现在为止一切正常,在此之后,我必须再添加一个条件,即日期周期检查
cabId-> CBX100仅分配10天,时间段是2017-08-10 INTO 2017-08-20,此详细信息在cab分配表中,请假设假设今天日期2017-08-09表示不应显示出租车分配详细信息,并假设今天是2017年8月21日,该时间也不应显示出租车分配详细信息,这次我们必须显示{“ status”:“ error”,“ data”:“找不到数据”}


  我必须检查的这种情况(例如如何在查询中添加这种情况)

最佳答案

签出并更新..

$date = "2017-08-16";
$sql = "SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a INNER JOIN trip_details as b ON a.allocationId = b.tripId where b.tripStatus != 1 and b.tripDate != '".$date."' UNION SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a LEFT JOIN trip_details as b ON a.allocationId = b.tripId where b.tripId IS NULL";

关于php - LEFT JOIN(连接两个表时,联接查询无法正常工作),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45711223/

10-11 05:21