MySQL hat keine rekursive Funktionalität, also bleibt Ihnen die Verwendung des NUMBERS-Tabellentricks -
-
Erstellen Sie eine Tabelle, die nur aufsteigende Zahlen enthält - einfach mit einem auto_increment:
DROP TABLE IF EXISTS `example`.`numbers`; CREATE TABLE `example`.`numbers` ( `id` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
Füllen Sie die Tabelle mit:
INSERT INTO NUMBERS (id) VALUES (NULL)
...für beliebig viele Werte.
-
Verwenden Sie DATE_ADD zum Erstellen einer Datumsliste, wobei die Tage basierend auf dem Wert von NUMBERS.id erhöht werden. Ersetzen Sie „2010-01-01“ und „2010-03-01“ durch Ihre jeweiligen Start- und Enddaten (aber verwenden Sie dasselbe Format, JJJJ-MM-TT) -
SELECT x.* FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) FROM numbers n WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
-
LEFT JOIN auf Ihre Datentabelle basierend auf dem datetime-Teil:
SELECT DATE(x.dt) AS dt, COALESCE(SUM(e.value), 0) AS sum_value FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) AS dt FROM numbers n WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x LEFT JOIN ENTRY e ON DATE(e.datetime) = x.dt AND e.entryid = 85 GROUP BY DATE(x.dt)
Warum Zahlen, keine Daten?
Einfach - Daten können basierend auf der Nummer generiert werden, wie in dem von mir bereitgestellten Beispiel. Es bedeutet auch, eine einzelne Tabelle zu verwenden, anstatt beispielsweise eine pro Datentyp.