2017-08-16 56 views
0

在这里,我正在做出租车分配模块,在这里我将解释我的要求,管理员分配驾驶室给员工在shift wise.this详细信息我存储在cab_allocation分配表。LEFT JOIN(连接两个表时加入查询不能正常工作)

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已经开始第二换挡,开始时间为○○年十月十二日,但此行没有完成所以

下一页cabId CBX101还没有开始他的行程没有结束时间和tripstatus,所以没有条目是这张表,

现在我的预期结果是哪个旅行是不完整的我想在驾驶室分配的细节。这里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,这个详细信息在驾驶室分配表中,想想今天假设的日期2017-08-09意味着不应该显示驾驶室分配细节并假设今天是2017-08-21这个时间也不应该显示出租车分配的细节,这次我们必须显示{“status”:“error”,“data”:“Data not found”}

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

+0

@Nawin,请查看我的预期的结果,我没有得到我预期的效果,同时加入日期条件,如果知道意味着张贴你的答案 –

+0

为什么ü正在联接到allocate_id和trip_id? –

+0

@Moiz Arif,在分配表中,我存储了分配细节,比如这辆出租车(CBX100)被分配到这个班次(1)直到这个日期(2017-08-2017)。因此,他每天都必须完成他的旅程,所以此行完成的细节我在trip_details串table.that我是连接两个表在这里分配ID是TRIPID的trip_details –

回答

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"; 
+0

我试过你的代码,我得到{“状态”:“错误”,“数据”:“数据未找到”},请注意我的trip_details表中有一件事现在没有数据,想想现在没有旅行是开始,实际效果应该来像的howmany alocation是否有分配表将要来 –

+0

@Swamym我已经更新了答案请.. –

+0

b.tripStatus!=“1”,我单引号内给予意味着它工作正常,从这里我必须给出日期条件,这也是我的问题。 –