LEFT JOIN(连接两个表时连接查询无法正常工作)

时间:2017-08-16 10:33:28

标签: php mysql json join

这里我正在进行驾驶室分配模块,在这里我将解释我的要求,管理员将轮椅分配给员工。我将这些详细信息存储在 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,但此行程未完成,因此没有结束时间和tripstatus

下一个cabId CBX101还没有开始他的行程,所以这个表没有条目,

现在我的预期结果是旅行是不完整的我想在出租车分配中详细说明。这里cab_allocation表 allocationId 我正在使用trip_details表的 tripId 的forien键。

  

我试过这个

    $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-08-21,那时候也不应该显示出租车分配的详细信息,这次我们要显示{" status":" error" ,"数据":"未找到数据"}

  

这种情况我必须检查(比如如何在我的查询中添加此条件)

1 个答案:

答案 0 :(得分:0)

检查并更新..

$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";