Ignore:
Timestamp:
2014/04/29 17:33:46 (10 years ago)
Author:
Seasoft
Message:

#2531 (DBMS に依存したサブクエリー内の LIMIT OFFSET を排除する)

Location:
branches/version-2_13-dev/data/class/pages
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/pages/admin/LC_Page_Admin_Home.php

    r23124 r23378  
    251251        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    252252 
    253         $sql = <<< __EOS__ 
    254             SELECT 
    255                 ord.order_id, 
    256                 ord.customer_id, 
    257                 ord.order_name01 AS name01, 
    258                 ord.order_name02 AS name02, 
    259                 ord.total, 
    260                 ord.create_date, 
    261                 (SELECT 
    262                     det.product_name 
    263                 FROM 
    264                     dtb_order_detail AS det 
    265                 WHERE 
    266                     ord.order_id = det.order_id 
    267                 ORDER BY det.order_detail_id 
    268                 LIMIT 1 
    269                 ) AS product_name, 
    270                 (SELECT 
    271                     pay.payment_method 
    272                 FROM 
    273                     dtb_payment AS pay 
    274                 WHERE 
    275                     ord.payment_id = pay.payment_id 
    276                 ) AS payment_method 
    277             FROM ( 
    278                 SELECT 
    279                     order_id, 
    280                     customer_id, 
    281                     order_name01, 
    282                     order_name02, 
    283                     total, 
    284                     create_date, 
    285                     payment_id 
    286                 FROM 
    287                     dtb_order AS ord 
    288                 WHERE 
    289                     del_flg = 0 AND status <> ? 
    290                 ORDER BY 
    291                     create_date DESC LIMIT 10 OFFSET 0 
    292             ) AS ord 
     253        $objQuery->setOrder('order_detail_id'); 
     254        $objQuery->setLimit(1); 
     255        $sql_product_name = $objQuery->getSqlWithLimitOffset('product_name', 'dtb_order_detail', 'order_id = dtb_order.order_id'); 
     256 
     257        $cols = <<< __EOS__ 
     258            dtb_order.order_id, 
     259            dtb_order.customer_id, 
     260            dtb_order.order_name01 AS name01, 
     261            dtb_order.order_name02 AS name02, 
     262            dtb_order.total, 
     263            dtb_order.create_date, 
     264            ($sql_product_name) AS product_name, 
     265            (SELECT 
     266                pay.payment_method 
     267            FROM 
     268                dtb_payment AS pay 
     269            WHERE 
     270                dtb_order.payment_id = pay.payment_id 
     271            ) AS payment_method 
    293272__EOS__; 
    294         $arrNewOrder = $objQuery->getAll($sql, ORDER_CANCEL); 
     273        $from = 'dtb_order'; 
     274        $where = 'del_flg = 0 AND status <> ?'; 
     275        $objQuery->setOrder('create_date DESC'); 
     276        $objQuery->setLimit(10); 
     277        $arrNewOrder = $objQuery->select($cols, $from, $where, ORDER_CANCEL); 
     278 
    295279        foreach ($arrNewOrder as $key => $val) { 
    296280            $arrNewOrder[$key]['create_date'] = str_replace('-', '/', substr($val['create_date'], 0,19)); 
  • branches/version-2_13-dev/data/class/pages/products/LC_Page_Products_List.php

    r23256 r23378  
    213213    public function lfGetProductsList($searchCondition, $disp_number, $startno, &$objProduct) 
    214214    { 
     215        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     216 
    215217        $arrOrderVal = array(); 
    216218 
    217         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    218219        // 表示順序 
    219220        switch ($this->orderby) { 
     
    235236                    $dtb_product_categories = 'dtb_product_categories'; 
    236237                } 
    237                 $order = <<< __EOS__ 
    238                     ( 
    239                         SELECT 
    240                             T3.rank * 2147483648 + T2.rank 
    241                         FROM 
    242                             $dtb_product_categories T2 
    243                             JOIN dtb_category T3 
    244                               ON T2.category_id = T3.category_id 
    245                         WHERE T2.product_id = alldtl.product_id 
    246                         ORDER BY T3.rank DESC, T2.rank DESC 
    247                         LIMIT 1 
    248                     ) DESC 
    249                     ,product_id DESC 
    250 __EOS__; 
    251                 $objQuery->setOrder($order); 
     238                $col = 'T3.rank * 2147483648 + T2.rank'; 
     239                $from = "$dtb_product_categories T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id"; 
     240                $where = 'T2.product_id = alldtl.product_id'; 
     241                $objQuery->setOrder('T3.rank DESC, T2.rank DESC'); 
     242                $objQuery->setLimit(1); 
     243                $sub_sql = $objQuery->getSqlWithLimitOffset($col, $from, $where); 
     244 
     245                $objQuery->setOrder("($sub_sql) DESC ,product_id DESC"); 
    252246                break; 
    253247        } 
Note: See TracChangeset for help on using the changeset viewer.