Dans cette requête, nous visons à récupérer toutes les transactions des sept derniers jours, en garantissant que même les jours sans ventes enregistrées sont inclus dans les résultats. Nous utilisons une technique qui combine deux requêtes distinctes pour obtenir ce résultat.
Tout d'abord, nous énumérons toutes les dates des sept derniers jours à l'aide d'une instruction SELECT imbriquée. Cette requête génère effectivement une liste de dates qui sert de base à nos données de transactions.
SELECT DATE_FORMAT(a.Date,'%Y-%m-%d') as purchase_date, '0' as amount FROM ( SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date FROM (SELECT 0 AS a 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) AS a CROSS JOIN (SELECT 0 AS a 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) AS b CROSS JOIN (SELECT 0 AS a 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) AS c ) a WHERE a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
Ensuite, nous combinons cette liste complète de dates avec une requête qui regroupe les données de ventes quotidiennes de notre table de transactions. Cette jointure garantit que nous incluons à la fois les transactions enregistrées et les lignes vides pour les dates sans activité.
LEFT JOIN ( SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') as purchase_date, COALESCE(SUM(amount), 0) AS amount FROM transactions WHERE purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() AND vendor_id = 0 GROUP BY purchase_date )t2 ON t2.purchase_date = t1.purchase_date GROUP BY t1.purchase_date ORDER BY t1.purchase_date DESC
En intégrant de manière transparente ces deux requêtes, nous construisons efficacement un tableau unique qui répertorie chronologiquement toutes les dates dans la plage spécifiée, avec les données de vente correspondantes ou des zéros lorsqu'aucune transaction n'a eu lieu.
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!