Mendapatkan Data Komprehensif daripada Jadual Tunggal MySQL: Meliputi Baris Kosong dan Transaksi Terkini
Dalam perbincangan ini, kami berhasrat untuk menangani cabaran bersama dihadapi apabila menanyakan pangkalan data: bagaimana untuk memasukkan kedua-dua transaksi terkini dan hari kosong ke dalam keputusan. Khususnya, kami akan menumpukan pada mendapatkan semula tujuh hari terakhir transaksi jualan sambil memasukkan baris kosong untuk hari tanpa sebarang aktiviti.
Untuk bermula, kami akan memanfaatkan keupayaan fungsi COALESCE(), yang membolehkan kami menggantikan nilai lalai jika ungkapan menilai kepada NULL. Dalam kes ini, kami akan menggunakan 0 sebagai nilai lalai untuk baris kosong.
Kami kemudiannya akan membuat subkueri untuk menjana senarai lengkap tarikh yang merangkumi tujuh hari yang lalu. Ini akan menjadi asas untuk set hasil lengkap, memastikan baris kosong disertakan.
Akhir sekali, kami akan melakukan operasi LEFT JOIN antara senarai tarikh yang dijana dan jadual transaksi, memadankan rekod berdasarkan PURCHASE_DATE lajur. Ini akan menggabungkan urus niaga dengan rekod tarikh kosong, membolehkan kami mengira jumlah amaun jualan untuk setiap hari dan memaparkan kedua-dua urus niaga terkini dan baris kosong.
Pertanyaan yang terhasil akan memberikan gambaran keseluruhan menyeluruh mengenai tujuh yang terakhir. hari transaksi jualan, mengambil kira hari tanpa aktiviti direkodkan.
Berikut ialah pertanyaan lengkap untuk rujukan:
SELECT t1.purchase_date, COALESCE(SUM(t1.amount + t2.amount), 0) AS amount FROM ( SELECT DATE_FORMAT(a.Date,'%Y-%m-%d') AS purchase_date, '0' AS amount FROM ( SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c ) a WHERE a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() ) t1 LEFT JOIN ( SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') AS purchase_date, COALESCE(SUM(amount), 0) AS amount FROM transactions WHERE purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() GROUP BY purchase_date ) t2 ON t2.purchase_date = t1.purchase_date GROUP BY t1.purchase_date ORDER BY t1.purchase_date DESC;
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Data Jualan Lengkap untuk Tujuh Hari Terakhir daripada Jadual MySQL, Termasuk Hari Tanpa Transaksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!