Ignore:
Timestamp:
2011/02/10 15:30:51 (13 years ago)
Author:
kimoto
Message:

売上集計リファクタリング #962

Location:
branches/version-2_5-dev/data/class/db/dbfactory
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php

    r20116 r20129  
    148148    } 
    149149 
     150 
     151    /** 
     152     * 売上集計の期間別集計のSQLを返す 
     153     * 
     154     * @param mixed $type 
     155     * @return string 検索条件のSQL 
     156     */ 
     157    function getOrderTotalDaysWhereSql($type) { 
     158        switch($type){ 
     159        case 'month': 
     160            $format = '%m'; 
     161            break; 
     162        case 'year': 
     163            $format = '%Y'; 
     164            break; 
     165        case 'wday': 
     166            $format = '%a'; 
     167            break; 
     168        case 'hour': 
     169            $format = '%H'; 
     170            break; 
     171        default: 
     172            $format = '%Y-%m-%d'; 
     173            break; 
     174        } 
     175 
     176        return " date_format(create_date, '".$format."') AS str_date, 
     177            COUNT(order_id) AS total_order, 
     178            SUM(CASE WHEN order_sex = 1 THEN 1 ELSE 0 END) AS men, 
     179            SUM(CASE WHEN order_sex = 2 THEN 1 ELSE 0 END) AS women, 
     180            SUM(CASE WHEN customer_id <> 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_member, 
     181            SUM(CASE WHEN customer_id <> 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_member, 
     182            SUM(CASE WHEN customer_id = 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_nonmember, 
     183            SUM(CASE WHEN customer_id = 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_nonmember, 
     184            SUM(total) AS total, 
     185            AVG(total) AS total_average"; 
     186    } 
     187 
     188 
    150189    /** 
    151190     * 文字列連結を行う. 
     
    278317        return $changesql; 
    279318    } 
    280      
     319 
    281320    /** 
    282321     * ARRAY_TO_STRING(ARRAY(A),B) を GROUP_CONCAT() に変換する. 
     
    289328        if(strpos(strtoupper($sql), 'ARRAY_TO_STRING') !== FALSE) { 
    290329            preg_match_all('/ARRAY_TO_STRING.*?\(.*?ARRAY\(.*?SELECT (.+?) FROM (.+?) WHERE (.+?)\).*?\,.*?\'(.+?)\'.*?\)/is', $sql, $match, PREG_SET_ORDER); 
    291              
     330 
    292331            foreach($match as $item) { 
    293332                $replace = 'GROUP_CONCAT(' . $item[1] . ' SEPARATOR \'' . $item[4] . '\') FROM ' . $item[2] . ' WHERE ' . $item[3]; 
     
    297336        return $sql; 
    298337    } 
    299      
     338 
    300339    /** 
    301340     * WHERE 句置換用の配列を返す. 
     
    434473 
    435474    } 
    436      
     475 
    437476    /** 
    438477     * インデックス作成の追加定義を取得する 
  • branches/version-2_5-dev/data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php

    r20116 r20129  
    129129        return "(SELECT CASE WHEN (SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1) = 1 AND o.payment_date IS NOT NULL THEN 1 WHEN DATE(NOW()) <= DATE(o.payment_date + '". $downloadable_days ." days') THEN 1 ELSE 0 END)"; 
    130130    } 
     131 
     132    /** 
     133     * 売上集計の期間別集計のSQLを返す 
     134     * 
     135     * @param mixed $type 
     136     * @return string 検索条件のSQL 
     137     */ 
     138    function getOrderTotalDaysWhereSql($type) { 
     139        switch($type){ 
     140        case 'month': 
     141            $format = 'MM'; 
     142            break; 
     143        case 'year': 
     144            $format = 'YYYY'; 
     145            break; 
     146        case 'wday': 
     147            $format = 'Dy'; 
     148            break; 
     149        case 'hour': 
     150            $format = 'HH24'; 
     151            break; 
     152        default: 
     153            $format = 'YYYY-MM-DD'; 
     154            break; 
     155        } 
     156 
     157        return "to_char(create_date, '".$format."') AS str_date, 
     158            COUNT(order_id) AS total_order, 
     159            SUM(CASE WHEN order_sex = 1 THEN 1 ELSE 0 END) AS men, 
     160            SUM(CASE WHEN order_sex = 2 THEN 1 ELSE 0 END) AS women, 
     161            SUM(CASE WHEN customer_id <> 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_member, 
     162            SUM(CASE WHEN customer_id <> 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_member, 
     163            SUM(CASE WHEN customer_id = 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_nonmember, 
     164            SUM(CASE WHEN customer_id = 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_nonmember, 
     165            SUM(total) AS total, 
     166            AVG(total) AS total_average"; 
     167    } 
     168 
    131169 
    132170    /** 
Note: See TracChangeset for help on using the changeset viewer.