如何使用MySQL JOIN从第二个表中获取两个计数结果

时间:2017-08-23 05:17:53

标签: php json php-5.6

这里我有两个表,(trip_details& trip_member),我的要求基于tripId。我想让员工在场计数和员工缺席计数。在trip_member表中,我存储了tripId foriegnkey ),empIdempPresentStatusempPresentStatus= '1'表示他不在,empPresentStatus ='0'表示存在。

  

trip_details

tripId      allocationId       tripStatus

 1             1                  1
 2             1                  1
  

trip_member

id       tripId          empId       empPresentStatus

 1         1              G2E201        0
 2         1              G2E202        0
 3         1              G2E203        1
 4         2              G2E204        0
 5         2              G2E205        1

根据我的表格结构,旅行中有多少员工以及旅行中缺少多少员工,我想计算一下。

  

我试过这个

$mysql = mysql_query("SELECT a.tripId, a.cabNo, COUNT('b.*') AS absentCount FROM trip_details a LEFT JOIN trip_member b ON a.tripId = b.tripId WHERE b.empPresentStatus = '1' AND a.tripStatus ='1' GROUP BY a.tripId");
while ($row = mysql_fetch_assoc($mysql)) {
    $data[] = $row;
} // my requirement is based on tripId I want take the employee present count and emplyee absent count, in trip_member table I stored tripId (forienkey),empId,empPresentStatus.here come to know like empPresentStatus= '1' means he is absent, suppose empPresentStatus ='0' means is present.
$arrayName = array('status' => 'success', 'data' =>$data );
echo json_encode($arrayName);
  

输出我

{
"status": "success",
"data": [
    {
        "tripId": "1",
        "cabNo": "CBX100",
        "absentCount": "1"
    },
    {
        "tripId": "2",
        "cabNo": "CBX101",
        "absentCount": "1"
    }
]
}

到目前为止确定。我想算一下这次旅行中有多少员工。我不知道怎么算这个,如果有人知道意味着更新我的答案。

  

预期结果

{
"status": "success",
"data": [
    {
        "tripId": "1",
        "cabNo": "CBX100",
        "absentCount": "1",
        "presentCount": "2"
    },
    {
        "tripId": "2",
        "cabNo": "CBX101",
        "absentCount": "1",
        "presentCount": "1"
    }
]
}
  

更新了表格(cab_allocation)

allocationId     shiftTiming        routeId     cabId
  1                 1                  1        CBX100
  2                 1                  1        CBX101

1 个答案:

答案 0 :(得分:1)

您可以在此使用子查询。

Change your query with this one.

"SELECT a.tripId, a.cabNo, (select count(*) from trip_member as m WHERE m.tripId=a.tripId and m.empPresentStatus = '1') as presentcount,(select count(*) from trip_member as m WHERE m.tripId=a.tripId and m.empPresentStatus = '0') as absentcount FROM trip_details a WHERE a.tripStatus ='1' GROUP BY a.tripId"