MySQLテーブルをクエリして、特定の日付範囲の各日の特定のデータを取得するためのより適切で迅速な方法を見つける必要があります。テーブルには、開始日と終了日を指定する2つの日付列があります。
表の例:プロモーション列:
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
2つの日付範囲が指定されている場合、次のクエリからマッチプロモーションを取得できることを知っています
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/15") AND CategoryID = A
上記のクエリの結果は、ID3の行をフェッチします
ただし、上記のクエリの2つの日付範囲が次のように変更された場合
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/18") AND CategoryID = A
ロジックがテーブルに格納されているデータのいずれとも一致しないことが理解できるため、一致する結果が得られません。
そのため、終了日がプロモーションの終了日を超えても結果を一致させることができる、より良いソリューションが必要です。ただし、ロジックを変更しても最良の答えは得られません。次のクエリを使用すると結果が得られると思いますが、日付範囲で毎日有効な割引を見つける必要がある場合は、これでも問題全体は解決されません。 。
SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND CategoryID = A
私が必要とする本当の結果は、このクエリをループに変換する方法、またはメモリ内の一時的なMySQLテーブルを使用して、以下に示すように毎日の結果をフェッチする方法です。
結果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
私の質問と問題が十分に説明されていることを願っています。この問題に関してさらに説明が必要な場合は、お知らせください。
これに対する素晴らしい答えを見たいと思っています。