Rumah > Artikel > pangkalan data > Bagaimana untuk mendapatkan semula rekod mengikut bulan dalam MySQL walaupun tiada data wujud untuk bulan tertentu?
Cara Memilih Rekod Mengikut Bulan dalam MySQL Walaupun Data Tidak Wujud
Untuk mendapatkan semula rekod mengikut bulan daripada jadual pengguna , anda boleh menggunakan pertanyaan seperti berikut:
SELECT COUNT(`userID`) AS total, DATE_FORMAT(`userRegistredDate`, '%b') AS MONTH, YEAR(`userRegistredDate`) AS year FROM `users` GROUP BY DATE_FORMAT(FROM_UNIXTIME(`userRegistredDate`, '%b'))
Pertanyaan ini akan memberikan anda jumlah bilangan pengguna dan bulan serta tahun pendaftaran mereka. Walau bagaimanapun, ia hanya akan memaparkan bulan dengan data sedia ada.
Untuk memasukkan bulan tanpa data, anda boleh menggunakan salah satu daripada pendekatan berikut:
Kaedah 1 : Union of Months
Kaedah ini melibatkan mewujudkan kesatuan semua bulan yang mungkin dalam tahun yang dikehendaki:
SELECT COUNT(u.userID) AS total, m.month FROM ( SELECT 'Jan' AS MONTH UNION SELECT 'Feb' AS MONTH UNION SELECT 'Mar' AS MONTH UNION SELECT 'Apr' AS MONTH UNION SELECT 'May' AS MONTH UNION SELECT 'Jun' AS MONTH UNION SELECT 'Jul' AS MONTH UNION SELECT 'Aug' AS MONTH UNION SELECT 'Sep' AS MONTH UNION SELECT 'Oct' AS MONTH UNION SELECT 'Nov' AS MONTH UNION SELECT 'Dec' AS MONTH ) AS m LEFT JOIN users u ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate) AND YEAR(u.userRegistredDate) = '2013' GROUP BY m.month ORDER BY 1+1;
Kaedah 2: Union of Dates
Kaedah ini mencipta gabungan tarikh untuk semua bulan dalam tahun yang dikehendaki:
SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year FROM ( SELECT '2013-01-01' AS merge_date UNION SELECT '2013-02-01' AS merge_date UNION SELECT '2013-03-01' AS merge_date UNION SELECT '2013-04-01' AS merge_date UNION SELECT '2013-05-01' AS merge_date UNION SELECT '2013-06-01' AS merge_date UNION SELECT '2013-07-01' AS merge_date UNION SELECT '2013-08-01' AS merge_date UNION SELECT '2013-09-01' AS merge_date UNION SELECT '2013-10-01' AS merge_date UNION SELECT '2013-11-01' AS merge_date UNION SELECT '2013-12-01' AS merge_date ) AS m LEFT JOIN users u ON MONTH(m.merge_date) = MONTH(u.userRegistredDate) AND YEAR(m.merge_date) = YEAR(u.userRegistredDate) GROUP BY m.merge_date ORDER BY 1+1;
Kedua-dua kaedah kesatuan mewujudkan ruang letak untuk semua bulan, membolehkan anda memaparkan rekod walaupun data tidak wujud . Pilihan antara dua kaedah bergantung pada keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula rekod mengikut bulan dalam MySQL walaupun tiada data wujud untuk bulan tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!