Ignore:
Timestamp:
2014/05/15 12:50:43 (12 years ago)
Author:
Seasoft
Message:

#2538 (商品一覧取得のDB処理で商品規格を全件処理している)

  • MySQL で速度低下するパターンがあるため、PostgreSQL のみ適用するよう組み直した。
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/SC_Product.php

    r23406 r23422  
    625625    public function alldtlSQL($where_products_class = '') 
    626626    { 
    627         if (!SC_Utils_Ex::isBlank($where_products_class)) { 
    628             $where_products_class = 'AND (' . $where_products_class . ')'; 
    629         } 
    630         /* 
    631          * point_rate, deliv_fee は商品規格(dtb_products_class)ごとに保持しているが, 
    632          * 商品(dtb_products)ごとの設定なので MAX のみを取得する. 
    633          */ 
    634         $sub_base = "FROM dtb_products_class WHERE del_flg = 0 AND product_id = dtb_products.product_id $where_products_class"; 
    635         $sql = <<< __EOS__ 
    636             ( 
    637                 SELECT 
    638                      dtb_products.* 
    639                     ,dtb_maker.name AS maker_name 
    640                     ,(SELECT MIN(product_code) $sub_base) AS product_code_min 
    641                     ,(SELECT MAX(product_code) $sub_base) AS product_code_max 
    642                     ,(SELECT MIN(price01) $sub_base) AS price01_min 
    643                     ,(SELECT MAX(price01) $sub_base) AS price01_max 
    644                     ,(SELECT MIN(price02) $sub_base) AS price02_min 
    645                     ,(SELECT MAX(price02) $sub_base) AS price02_max 
    646                     ,(SELECT MIN(stock) $sub_base) AS stock_min 
    647                     ,(SELECT MAX(stock) $sub_base) AS stock_max 
    648                     ,(SELECT MIN(stock_unlimited) $sub_base) AS stock_unlimited_min 
    649                     ,(SELECT MAX(stock_unlimited) $sub_base) AS stock_unlimited_max 
    650                     ,(SELECT MAX(point_rate) $sub_base) AS point_rate 
    651                     ,(SELECT MAX(deliv_fee) $sub_base) AS deliv_fee 
    652                     ,(SELECT COUNT(*) $sub_base) AS class_count 
    653                 FROM dtb_products 
    654                     LEFT JOIN dtb_maker 
    655                         ON dtb_products.maker_id = dtb_maker.maker_id 
    656                 WHERE EXISTS(SELECT * $sub_base) 
    657             ) AS alldtl 
    658 __EOS__; 
    659  
    660         return $sql; 
     627        $objDBFactory = SC_DB_DBFactory_Ex::getInstance(); 
     628 
     629        return $objDBFactory->alldtlSQL($where_products_class); 
    661630    } 
    662631 
Note: See TracChangeset for help on using the changeset viewer.