在这里,我正在做出租车分配模块,在这里我将解释我的要求,管理员按班次分配出租车给员工。此详细信息存储在cab_allocation分配表中。
cab_allocation(表名称)
allocationId date cabId shiftTiming
1 2017-08-12 CBX100 1
2 2017-08-12 CBX100 2
3 2017-08-12 CBX101 3
在此,cabId CBX100每天分配两次,而CBX101每天分配一次。在此之后,我想跟踪这次旅行是否发生,对于此跟踪详细信息,我将其存储在trip_details表中
trip_details(表名)
tripId cabNo shiftId tripDate startTime endTime tripStatus
1 CBX100 1 2017-08-12 09:30:00 11:30:00 1
2 CBX100 2 2017-08-12 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。
我尝试过但是我没有得到确切的结果,因为CBX101 cabId尚未开始旅行,所以trip_details表中没有条目,因此我无法获取详细信息。
我试过这样
$sql = "SELECT * FROM `cab_allocation` a INNER JOIN trip_details b ON a.allocationId=b.tripId WHERE b.tripStatus !='1'";
$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": 1,
"data": [
{
"allocationId": "2",
"date": "2017-08-12",
"shiftTiming": "2",
"routeId": "1",
"cabId": "CBX100",
"tripId": "2",
"cabNo": "CBX100",
"driverId": "G2E100",
"shiftId": "2",
"tripDate": "",
"startTime": "12.10.0",
"endTime": "",
"tripStatus": "0"
}
]
}
预期成绩
{
"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",
},
]
}
最佳答案
正确的SQL将是:
SELECT a.allocationId, a.date, a.shiftTiming, a.cabId
FROM cab_allocation a
LEFT JOIN trip_details b
ON a.allocationId = b.tripId
WHERE b.tripStatus !='1'
LEFT JOIN将匹配不在trip_details上的cab_allocation上的记录