Maison >base de données >tutoriel mysql >Comment récupérer toutes les dates dans une plage, y compris celles sans enregistrement dans MySQL ?
Dans la gestion de bases de données, visualiser la croissance de la base d'utilisateurs nécessite souvent une représentation graphique. Pour créer un tel graphique, vous pouvez disposer d'une requête qui collecte le nombre d'utilisateurs quotidiens au cours d'une plage de dates spécifique. Cependant, si certains jours manquent d’activité des utilisateurs, ces dates sont omises des résultats. Pour résoudre ce problème, explorons comment obtenir une plage de dates complète, y compris les dates sans aucun enregistrement.
Dans MySQL, la requête suivante récupère le nombre d'utilisateurs regroupés par jour dans une plage de dates spécifiée :
SELECT DATE(datecreated), count(*) AS number FROM users WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW()) GROUP BY DATE(datecreated) ORDER BY datecreated ASC
Bien que cette requête fournisse la plupart des informations souhaitées, elle exclut les dates avec zéro utilisateur. Pour inclure des dates vides, nous pouvons utiliser l'approche suivante :
SELECT * FROM ( SELECT date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*10000+n4.num*1000+n3.num*100+n2.num*10+n1.num DAY ) as date FROM (SELECT 0 AS num 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) n1, (SELECT 0 AS num 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) n2, (SELECT 0 AS num 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) n3, (SELECT 0 AS num 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) n4, (SELECT 0 AS num 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) n5 ) a WHERE date > '2011-01-02 00:00:00.000' AND date < NOW() ORDER BY date
Avec cette requête, vous pouvez générer une séquence de dates dans une plage spécifiée et les inclure dans les résultats, même si ces dates n'ont pas de correspondance. enregistrements dans votre base de données.
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!