Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mendapatkan semula rekod mengikut bulan dalam MySQL walaupun tiada data wujud untuk bulan tertentu?

Bagaimana untuk mendapatkan semula rekod mengikut bulan dalam MySQL walaupun tiada data wujud untuk bulan tertentu?

Susan Sarandon
Susan Sarandonasal
2024-11-07 15:39:02747semak imbas

How to retrieve month-wise records in MySQL even if no data exists for specific months?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn