2017-08-23 3 views
0

Ici, j'ai deux tables, (trip_details & trip_member), ma condition est basée sur tripId. Je veux que le nombre actuel d'employés et le nombre d'employés absents soient comptés. Dans le tableau trip_member j'ai stocké tripId (foriegnkey), empId, empPresentStatus. empPresentStatus= '1' signifie qu'il est absent, empPresentStatus ='0' signifie est présent.Comment prendre deux comptes résultat de la deuxième table en utilisant MySQL JOIN

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 

basé sur ma structure de table, combien de salariés présents dans le voyage et combien de salariés absents dans le voyage, Je veux prendre le compte.

J'ai essayé

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

sortie Je reçois

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

Jusqu'à présent, ok. Je veux prendre le compte combien d'employés sont présents dans le voyage. Je ne sais pas comment prendre ce compte, si quelqu'un sait, cela signifie mettre à jour ma réponse.

Résultats attendus

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

Table Mise à jour (cab_allocation)

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

N'est-ce pas facile si vous avez une autre colonne comme 'empAbsentStatus' et sera plus facile de le faire en une seule requête. – Sand

Répondre

1

Vous pouvez utiliser sous requête dans ce domaine.

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

J'ai essayé votre code je ne reçois pas mes résultats attendus, je reçois comme ça { "status": "succès", "data": [ { "tripId": "1", "cabNo" : "CBX100", "presentcount": "1", "absentcount": "2" }, { "tripId": "2", "cabNo": "CBX101", "presentcount": "1", "absentcount": "1" } ] } –

+0

Trip id 1, il devrait apparaître comme ceci "absentCount": "1", et "presentCount": "2", mais votre requête retourne mal –

+0

Il suffit de changer la condition dans la sous-requête.SELECT a.tripId, a.cabNo, (sélectionnez count (*) from trip_member comme m WHERE m.tripId = a.tripId et m.empPresentStatus = '1') comme absentcount, (select count (*) from trip_member comme m WHERE m.tripId = a.tripId et m.empPresentStatus = '0') comme presentcount DE trip_details a WHERE a.tripStatus = '1' GROUP BY a.tripId " – Priyank