0

日付範囲のすべての日を格納する mysql テーブルがあり、ユーザーは開始日と終了日、および価格を入力し、その特定の季節の行として毎日と価格を格納します。それが私が持っている唯一の情報です。この日付範囲は、特定の平日に適用できます。

私がやりたいことは、すべての日を取得し、季節と平日でグループ化することです。

例:
2013 年 4 月 1 日から 30 日までの日付範囲が月曜から金曜 = 100€<br>、2013 年 4 月 1 日から 30 日までの土曜から日曜までが 80€<br>、5 月 1 日から 5 月 31 日までの月曜 - 金曜 = 200€<br> および 5 月 1 日から 5 月 31 日までの土曜日 - 日曜日 = 180€<br>

これをグループ化するためにphpを使用しようとしましたが、正しい日付がありません

データベースは次のようになります。

Day         |  Price
2013-04-01  | 100€
2013-04-02  | 100€
2013-04-03  | 100€
2013-04-04  | 100€
2013-04-05  | 100€
2013-04-06  | 80€
2013-04-07  | 80€
2013-04-08  | 100€
2013-04-09  | 100€
2013-04-10  | 100€
...

PHP を使用して、これを平日の季節としてグループ化する方法はありますか?

4

1 に答える 1

0

あなたは物事をグループ化しようとしています。グループの曜日と名前を取得する必要があります。

アプローチは、連続する値の「名前」を見つけることです。この「名前」は、平日または週末のいずれかで、価格が現在の価格と異なる将来の日付です(質問を正しく理解している場合)。

グループ化group byしたら、ピリオドの開始と終了を取得するために使用します。

select min(day) as startday, max(day) as endday, price
from (select t.*,
             (select day
              from t t2
              where (case when weekday(t2.day) bewteen 0 and 4 then 'Week' else 'Weekend' end) = 
                    t.period and
                    t2.day > t.day and
                   t2.price <> t.price
             ) as grouping
      from (select t.*, (case when weekday(day) bewteen 0 and 4 then 'Week' else 'Weekend' end) as period
            from t
           ) t
     ) t
 group by grouping, price

この SQL はテストしていないため、構文エラーがある可能性があります。

于 2013-02-25T18:47:56.517 に答える