J'ai besoin de trouver une méthode rapide et efficace pour interroger MySQL afin d'obtenir des données spécifiques pour chaque jour dans une plage de dates donnée, où la table contient deux colonnes de dates et date de fin.Requête MySQl avancée pour récupérer des enregistrements spécifiques à une date dans la même table
Tableau Exemple: Promotions colonnes:
ID startDate EndDate Discount CategoryID
=============================================================
1 2010/08/01 2010/08/10 10.00 A
2 2010/08/01 2010/08/10 15.00 B
3 2010/08/11 2010/08/15 05.00 A
4 2010/08/11 2010/08/15 10.00 B
Je sais que je peux saisir la promotion de correspondance de la requête suivante lorsque deux plages de dates sont données
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/15") AND CategoryID = A
Le résultat de la requête ci-dessus récupère la ligne avec l'ID 3
Cependant, si les deux plages de dates dans la requête ci-dessus ont été remplacées par quelque chose comme le suivant
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/18") AND CategoryID = A
Je ne reçois aucun résultat adapté, que je peux comprendre la logique ne correspond pas à l'une des données stockées dans la table.
C'est pourquoi, j'ai besoin d'une meilleure solution où je peux obtenir le résultat correspondant même si la date de fin dépasse plus que la date de fin d'une promotion. Cependant changer la logique ne me donnera pas la meilleure réponse, supposons que je puisse obtenir le résultat si j'utilise la requête suivante mais cela ne résout pas non plus tout le problème si j'ai besoin de trouver des remises valides de chaque jour dans la plage de dates .
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND CategoryID = A
Le résultat vrai que j'ai besoin est un moyen de convertir cette requête en boucle ou en utilisant une table MySQL temporaire dans le memmory pour aller chercher des résultats pour chaque jour comme indiqué ci-dessous.
Résultat Je dois trouver pour la date Range 2010/08/12 à 2010/08/18
===================================================================
Date Discount
=========================
2010/08/12 05.00
2010/08/13 05.00
2010/08/14 05.00
2010/08/15 05.00
2010/08/16 null
2010/08/18 null
J'espère que ma question et le problème est bien expliqué et si vous avez besoin d'éclaircissements sur ce problème , s'il vous plaît, faites-moi savoir.
Nous espérons avoir une bonne réponse pour cela.
Vous demandez pour 'endDate> = 2010/08/18', il n'y a pas d'enregistrements qui devraient correspondre, alors quel est le problème? –
C'est un peu flou. Vous voulez trouver, pour un jour donné, les promotions actives ce jour-là? Et puis prolonger cela pour dire "pour tous les jours dans cette gamme, montrez-moi les promotions actives ce jour-là"? –
@Sander le vrai problème ici est de présenter un résultat comme indiqué dans le tableau de résultats final que je cherche, qui peut identifier individuellement le rabais disponible pour chaque jour de la promotion disponible. – Raftalks