Sélection de données entre des dates avec des lignes vides dans MySQL
Récupérer des données entre des dates spécifiées à partir d'une base de données est une tâche courante. Cependant, cela peut devenir difficile lorsque vous devez également inclure des lignes vides dans la plage de dates. Dans cet article, nous explorerons une technique pour résoudre ce problème dans MySQL.
Considérons une table nommée "tbl" avec des lignes contenant des données et des dates :
2009-06-25 75 2009-07-01 100 2009-07-02 120
Une requête typique pour sélectionner les données entre deux dates, disons « 2009-06-25 » et « 2009-07-01 », seraient be :
SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01'
Cependant, cette requête manquera toutes les dates vides dans cette plage. Pour les inclure, MySQL propose un concept puissant appelé « tables de calendrier ».
Une table de calendrier est une table d'assistance qui contient une série de dates. Vous pouvez facilement en créer un à l'aide d'une technique illustrée par ce guide :
-- create some infrastructure CREATE TABLE ints (i INTEGER); INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); -- only works for 100 days, add more ints joins for more SELECT cal.date, tbl.data FROM ( SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date FROM ints a JOIN ints b ORDER BY a.i * 10 + b.i ) cal LEFT JOIN tbl ON cal.date = tbl.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Cette requête renverra toutes les lignes du « 2009-06-25 » au « 2009-07-01 », y compris les lignes vides avec un valeur zéro pour « données ». Notez que vous pouvez optimiser cette technique en remplaçant la sous-requête par un tableau de calendrier régulièrement mis à jour.
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!