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

Susan Sarandon
Lepaskan: 2024-11-07 15:39:02
asal
818 orang telah melayarinya

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'))
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan