在这里,我正在做出租车分配模块,在这里我将解释我的要求,管理员按班次分配出租车给员工。此详细信息存储在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/