Index: /branches/camp/camp-2_5-D/data/class/SC_Product.php
===================================================================
--- /branches/camp/camp-2_5-D/data/class/SC_Product.php	(revision 19523)
+++ /branches/camp/camp-2_5-D/data/class/SC_Product.php	(revision 19546)
@@ -48,30 +48,4 @@
     /** 検索用並び替え条件配列 */
     var $arrOrderData;
-
-    /**
-     * SC_Queryインスタンスに設定された検索条件をもとに商品IDの配列を取得する.
-     *
-     * 検索条件は, SC_Query::getWhere() 関数で設定しておく必要があります.
-     *
-     * @param SC_Query $objQuery SC_Query インスタンス
-     * @param array $arrVal 検索パラメータの配列
-     * @return array 商品IDの配列
-     */
-    function findProductIds(&$objQuery, $arrVal = array()) {
-        $table = <<< __EOS__
-                 dtb_products AS alldtl
-            JOIN dtb_product_categories AS T2
-              ON alldtl.product_id = T2.product_id
-            JOIN dtb_category
-              ON T2.category_id = dtb_category.category_id
-__EOS__;
-        // SC_Query::getCol() ではパフォーマンスが出ない
-        $results = $objQuery->select('alldtl.product_id', $table, "", $arrVal,
-                                     MDB2_FETCHMODE_ORDERED);
-        foreach ($results as $val) {
-            $resultValues[] = $val[0];
-        }
-        return array_unique($resultValues);
-    }
     
     /**
@@ -154,5 +128,4 @@
         return $objQuery->getOne( "SELECT count(*) FROM ( $sql_base ) as t" , $arrVal);
     }
-    
 
     /**
Index: /branches/camp/camp-2_5-D/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
===================================================================
--- /branches/camp/camp-2_5-D/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	(revision 18875)
+++ /branches/camp/camp-2_5-D/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	(revision 19546)
@@ -62,5 +62,4 @@
         $objSess = new SC_Session();
         $objDb = new SC_Helper_DB_Ex();
-        $objQuery = new SC_Query();
 
         // 認証可否の判定
@@ -82,5 +81,5 @@
             $this->lfConvertParam();
 
-            $where = "del_flg = 0";
+            $where = "alldtl.del_flg = 0";
             $arrval = array();
 
@@ -99,10 +98,10 @@
                     list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val);
                     if($tmp_where != "") {
-                        $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
+                        $where.= " AND alldtl.product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")";
                         $arrval = array_merge((array)$arrval, (array)$tmp_arrval);
                     }
                     break;
                 case 'search_product_code':
-                    $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code LIKE ? GROUP BY product_id)";
+                    $where .= " AND alldtl.product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code LIKE ? GROUP BY product_id)";
                     $arrval[] = "$val%";
                     break;
@@ -112,10 +111,10 @@
             }
 
+            // 検索結果対象となる商品の数を取得
+            $objQuery =& SC_Query::getSingletonInstance();
+            $objQuery->setWhere($where);
             $objProduct = new SC_Product();
-            $productIds = $objProduct->findProductIds($objQuery, $arrval);
-
-            // 行数の取得
-            $linemax = count($productIds);
-            $this->tpl_linemax = $linemax;
+            $linemax = $objProduct->findProductCount($objQuery, $arrval);
+            $this->tpl_linemax = $linemax;   // 何件が該当しました。表示用
 
             // ページ送りの処理
@@ -132,4 +131,8 @@
             $startno = $objNavi->start_row;
 
+            $objProduct = new SC_Product();
+            $objQuery =& SC_Query::getSingletonInstance();
+            $objQuery->setWhere($where);
+
             // 取得範囲の指定(開始行番号、行数のセット)
             $objQuery->setLimitOffset($page_max, $startno);
@@ -138,6 +141,28 @@
 
             // 検索結果の取得
-            $this->arrProducts = $objProduct->lists($objQuery, $arrval);
-            $objProduct->setProductsClassByProductIds($productIds);
+            $arrProduct_id = $objProduct->findProductIdsOrder($objQuery, $arrval);
+
+            $where = "";
+            if (is_array($arrProduct_id) && !empty($arrProduct_id)) {
+                $where = 'product_id IN (' . implode(',', $arrProduct_id) . ')';
+            } else {
+                // 一致させない
+                $where = '0<>0';
+            }
+            $objQuery =& SC_Query::getSingletonInstance();
+            $objQuery->setWhere($where);
+            $arrProducts = $objProduct->lists($objQuery, $arrProduct_id);
+
+            //取得している並び順で並び替え
+            $arrProducts2 = array();
+            foreach($arrProducts as $item) {
+                $arrProducts2[ $item['product_id'] ] = $item;
+            }
+            $this->arrProducts = array();
+            foreach($arrProduct_id as $product_id) {
+                $this->arrProducts[] = $arrProducts2[$product_id];
+            }
+
+            $objProduct->setProductsClassByProductIds($arrProduct_id);
             $objJson = new Services_JSON();
             $this->tpl_javascript .= 'productsClassCategories = ' . $objJson->encode($objProduct->classCategories) . '; ';
