2017-05-26 2 views
-1

Lassen Sie mich ein wenig Hintergrundgeschichte zu erklären, kann ein Lehrer einen Schüler anwesend oder abwesend setzen. Die Werte dieser Schüler werden in eine Datenbank eingegeben, diese Abfrage wählt den Klassencode aus und berechnet den Prozentsatz der Schüler, die in einer bestimmten Lektion anwesend sind, aber ich bleibe irgendwie dabei, was zu tun ist, die Datei muss in JSON und konvertiert werden In einen ChartJS-Balkendiagramm einfügen, aber aus irgendeinem Grund kann ich diesen Code einfach nicht verstehen, jeder Prozentsatz muss für jede Klasse berechnet werden, so dass ich IN oder etwas ähnliches nicht verwenden kann, das die Anwesenheit der gesamten Lektion berechnen würde anstatt der Klasse pro Lektion (dafür steht der klas.code = '$ klas') weiß jemand, wie ich 1 Ergebnis bekommen kann, aber trotzdem in der Lage bin, den Prozentsatz für jede Klasse einzeln zu berechnen?Foreach-Schleife in MySQL-Abfrage

Vielen Dank.

$klassen = array("WFHBOICT.V1E", "WFHBOICT.V1F"); 
foreach($klassen as $klas){ 
//query to get data from the table 
$query = ("SELECT klas.code klas, ROUND(
(
    SELECT Count(aanwezigheid) 
    FROM aanwezigheid 
    JOIN college ON aanwezigheid.Ccode = college.code 
    JOIN klas ON college.Kcode = klas.code 
    WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
    AND aanwezigheid = '1' 
) 
/
(
    SELECT Count(aanwezigheid) 
    FROM aanwezigheid 
    JOIN college ON aanwezigheid.Ccode = college.code 
    JOIN klas ON college.Kcode = klas.code 
    WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
) 
* 100) 
    as percentage 
FROM aanwezigheid 
JOIN college ON aanwezigheid.Ccode = college.code 
JOIN klas ON college.Kcode = klas.code 
JOIN vak ON college.Vcode = vak.code 
WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
GROUP BY klas.code"); 

//execute query 
$result = $mysqli->query($query); 

//loop through the returned data 
$data = array(); 
foreach ($result as $row) { 
$data[] = $row; 
} 

print json_encode($data); 

Dies ist das Ergebnis:

[{"klas":"WFHBOICT.V1F","percentage":"67"}] 

hat es beiden Klassen zwischen den Klammern anstelle von nur 1 ...

+0

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple- SQL-Abfrage – Strawberry

Antwort

1

Das Problem von der ersten foreach-Schleife kommt zurückzukehren. Initialisiere das $ data-Array davor und schließe die erste foreach vor dem Ausdruck.

$klassen = array("WFHBOICT.V1E", "WFHBOICT.V1F"); 

$data = array(); 
foreach($klassen as $klas){ 
    //query to get data from the table 
    $query = ("SELECT klas.code klas, ROUND(
    (
     SELECT Count(aanwezigheid) 
     FROM aanwezigheid 
     JOIN college ON aanwezigheid.Ccode = college.code 
     JOIN klas ON college.Kcode = klas.code 
     WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
     AND aanwezigheid = '1' 
    ) 
    /
    (
     SELECT Count(aanwezigheid) 
     FROM aanwezigheid 
     JOIN college ON aanwezigheid.Ccode = college.code 
     JOIN klas ON college.Kcode = klas.code 
     WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
    ) 
    * 100) 
     as percentage 
    FROM aanwezigheid 
    JOIN college ON aanwezigheid.Ccode = college.code 
    JOIN klas ON college.Kcode = klas.code 
    JOIN vak ON college.Vcode = vak.code 
    WHERE klas.code = '".$klas."' AND vak.code = 'WFHBOICT.M032.16' AND college.college = '8' 
    GROUP BY klas.code"); 

    //execute query 
    $result = $mysqli->query($query); 

    //loop through the returned data 

    foreach ($result as $row) { 
     $data[] = $row; 
    } 
} // end first foreach 
print json_encode($data); 

Ich hoffe, es hilft.