MySQL tidak memiliki fungsi rekursif, jadi Anda tinggal menggunakan trik tabel ANGKA -
-
Buat tabel yang hanya menampung angka yang bertambah - mudah dilakukan menggunakan peningkatan_otomatis:
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;
-
Isi tabel menggunakan:
INSERT INTO NUMBERS (id) VALUES (NULL)
...untuk nilai sebanyak yang Anda butuhkan.
-
Gunakan DATE_ADD untuk membuat daftar tanggal, menambah hari berdasarkan nilai NUMBERS.id. Ganti "2010-01-01" dan "2010-03-01" dengan tanggal mulai dan akhir masing-masing (tetapi gunakan format yang sama, YYYY-MM-DD) -
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
-
KIRI GABUNG ke tabel data Anda berdasarkan porsi tanggal-waktu:
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)
Mengapa Angka, bukan Tanggal?
Sederhana - tanggal dapat dibuat berdasarkan nomor, seperti pada contoh yang saya berikan. Ini juga berarti menggunakan satu tabel, vs katakan satu per tipe data.