Maison >base de données >tutoriel mysql >Comment récupérer des enregistrements mensuels dans MySQL même s'il n'existe aucune donnée pour des mois spécifiques ?
Comment sélectionner des enregistrements mensuels dans MySQL même si les données n'existent pas
Pour récupérer des enregistrements mensuels à partir d'une table utilisateur , vous pouvez utiliser une requête comme celle-ci :
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'))
Cette requête vous fournira le nombre total d'utilisateurs ainsi que le mois et l'année de leur inscription. Cependant, il n'affichera que les mois avec des données existantes.
Pour inclure des mois sans données, vous pouvez utiliser l'une des approches suivantes :
Méthode 1 : Union des Mois
Cette méthode consiste à créer une union de tous les mois possibles dans l'année souhaitée :
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;
Méthode 2 : Union des Dates
Cette méthode crée une union de dates pour tous les mois de l'année souhaitée :
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;
Les deux méthodes d'union créent des espaces réservés pour tous les mois, vous permettant d'afficher des enregistrements même si les données n'existent pas . Le choix entre les deux méthodes dépend de vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!