Sempervivum
Erfahrenes Mitglied
Ich bin jetzt bei zwei verschiedenen Aufgaben auf folgendes Problem gestoßen: Daten, in meinem Beispiel visits bzw. Besuche, werden mit SUM aufsummiert und nach Tagen gruppiert. Dabei tritt das Problem auf, dass nicht für jeden Tag Daten vorhanden sind, so dass im Ergebnis Lücken entstehen. Diese müssen mit 0 aufgefüllt werden, da es sonst Probleme bei der Darstellung als Chart gibt. Ich habe das bis jetzt durch eine Nachverarbeitung in PHP gelöst:
Meine Frage ist, ob man das besser und einfacher lösen kann, u. U gleich in der Query und die Arbeit der Datenbank überlassen?
Edit: Abfrage verschönert.
Code:
$sql = "SELECT DATE_FORMAT(visit_date, '%Y-%m-%d') as d, COUNT(1) AS visits
FROM `visits`
WHERE visit_date > DATE_SUB(NOW(), INTERVAL 21 DAY)
GROUP BY d";
$result = $pdo->query($sql);
// wir erzeugen zunaechst ein ass. Array mit dem Datum als Schluessel:
$resultArr = [];
foreach ($result as $row) {
// Anzahl der Besuche mit Datum als Schluessel in Array eintragen
$resultArr[$row['d']] = $row['visits'];
}
// Referenzdatum fuer heute vor einer Woche bereitstellen:
// aktuelles Datum ermitteln und 3 Wochen subtrahieren
$refDate = new DateTime();
$refDate->modify('-3 week');
$visits = [];
$days = [];
// ueber 3 Wochen iterieren:
for ($i = 0; $i < 21; $i++) {
// String für das aktuelle Datum bereit stellen
$refDateStr = $refDate->format('Y-m-d');
// ist ein Element im Ergebnis vorhanden?
if (isset($resultArr[$refDateStr])) {
// Daten übernehmen
$visits[$i] = $resultArr[$refDateStr];
} else {
// 0 eintragen
$visits[$i] = 0;
}
$days[$i] = $refDateStr;
$refDate->modify('+1 day');
}
var_dump($resultArr);
var_dump($visits);
var_dump($days);
Edit: Abfrage verschönert.
Zuletzt bearbeitet: