Op mijn website www.lerarentekortisnu.nl houd ik registraties bij van het lerarentekort.
Kijk gerust even rond, wat je op de voorpagina in de tabel (en sematisch!) ziet is eigenlijk gelijk aan de database. Ik heb maar 1 tabel met deze opzet:
Niet heel ingewikkeld dus.
Op http://lerarentekortisnu.nl/stat.php heb ik al in een tabel wat statistieken.
Nu wil ik een lijngrafiek maken met de resultaten per oplossing, per dag.
Maar hoe vraag ik dat op in 1 SQL?
SUM(aantal_leerlingen), datum, oplossing
Moet kunnen toch?
Visualiseer ik deze getallen in een tabel:"
RIJ = oplossing
KOLOM = datum
WAARDE = SUM(aantal_leerlingen)
Maar hoe krijg ik dat in 1 query?
[size=xsmall]Toevoeging op 11/02/2018 15:46:58:[/size]
O ja: en ook als er 0 leerlingen zijn op een datum, moet ik die TOCH hebben.
Dus wellicht eerst een tabel maken met alle data/datums? En dan met een LEFT JOIN?
Je wilt het aantal keren dat een oplossing is gekozen (COUNT), je wilt hier dus tevens op groeperen (GROUP BY). Daarbij wil je het aantal leerlingen die bij deze school hoort vermelden (SUM). En dit op een bepaalde datum (WHERE).
Zoiets dus:
SELECT oplossing, COUNT(oplossing), SUM(aantal_leerlingen) AS leerlingen
FROM table
WHERE datum = CURRENT_DATE()
GROUP BY oplossing
ORDER BY leerlingen DESC
(mogelijk werkt de ORDER BY niet, order dan simpelweg op SUM(aantal_leerlingen))
Het was misschien handiger geweest als je van de oplossingen keuzes had gemaakt in een andere tabel, zodat je hier in deze tabel naar kunt refereren via een auto increment id.
Mogelijk loont het (in dit geval) de moeite om een index aan te maken op datum en/of oplossing.
SELECT `oplossing`, `datum`, SUM(`leerlingen`) AS totaal FROM `tekort` GROUP BY oplossing, DAYOFYEAR(datum)
dan de array met resultaten even organizen:
<?php
// proef resultaat set
$arr = json_decode('[{"oplossing":"verdelen","datum":"2018-02-01 00:00:00","totaal":"23"}, {"oplossing":"verdelen","datum":"2018-02-02 00:00:00","totaal":"9"}, {"oplossing":"VRIJ","datum":"2018-02-01 00:00:00","totaal":"11"}]', true);
foreach($arr as $item) {
$date = new DateTime($item['datum']);
$columnheaders[$date->format('d-m-Y')] = $date->format('d-m-Y');
$table[$item['oplossing']][$date->format('d-m-Y')] = $item['totaal'];
}