Naomi Suzukawa
suzuk****@bitsc*****
2004年 5月 16日 (日) 19:20:47 JST
杉本さん、こんにちは。 鈴川です。 過去1ヶ月間のベストセラーを表示したいと希望される方は、 他にもいらっしゃるかもしれないですね。 ベストセラーの期間集計は、SQL文を変更する必要があります。 次に示すSQL文で過去30日間のベストセラーを表示することができます。 [ファイル] catalog/includes/boxes/best_sellers.php ** Line 13 - 17 [変更前] if (isset($current_category_id) && ($current_category_id > 0)) { $best_sellers_query = tep_db_query("select distinct p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c where p.products_status = '1' and p.products_ordered > 0 and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and '" . $current_category_id . "' in (c.categories_id, c.parent_id) order by p.products_ordered desc, pd.products_name limit " . MAX_DISPLAY_BESTSELLERS); } else { $best_sellers_query = tep_db_query("select distinct p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_ordered > 0 and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' order by p.products_ordered desc, pd.products_name limit " . MAX_DISPLAY_BESTSELLERS); } # products(商品テーブル)の # products_ordered(ショップをオープンしてからの商品の累積販売数)で # 降順に並べ替えてベストセラーを表示する。 [変更後] if (isset($current_category_id) && ($current_category_id > 0)) { $best_sellers_query = tep_db_query("select distinct p.products_id, pd.products_name, sum(op.products_quantity) as products_quantity from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_ORDERS . " o, " . TABLE_ORDERS_PRODUCTS . " op where op.products_id = p.products_id and op.orders_id = o.orders_id and o.date_purchased >= DATE_SUB(now(), INTERVAL 30 DAY) and p.products_status = '1' and p.products_ordered > 0 and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and '" . $current_category_id . "' in (c.categories_id, c.parent_id) group by op.products_id order by products_quantity desc, pd.products_name limit " . MAX_DISPLAY_BESTSELLERS); } else { $best_sellers_query = tep_db_query("select distinct p.products_id, pd.products_name, sum(op.products_quantity) as products_quantity from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_ORDERS . " o, " . TABLE_ORDERS_PRODUCTS . " op where op.products_id = p.products_id and op.orders_id = o.orders_id and o.date_purchased >= DATE_SUB(now(), INTERVAL 30 DAY) and p.products_status = '1' and p.products_ordered > 0 and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' group by op.products_id order by products_quantity desc, pd.products_name limit " . MAX_DISPLAY_BESTSELLERS); } # orders_products(受注商品テーブル)の # date_purchased(受注日時)>=今よりも30日前で # products_quantity(商品の注文数)を集計し # それを降順に並べ替えてベストセラーを表示する。 # # 過去30日間の指定をしているのは次の箇所です。 # 期間の変更をしたい場合は「30」を変えてください。 # o.date_purchased >= DATE_SUB(now(), INTERVAL 30 DAY) 1ヶ月間の受注数が多い(対象とするレコード数が多い)場合は、 このSQL文を実行すると遅くなるかもしれません。 その場合は、テーブルの最適化やキャッシュの利用などの対策が 必要になると思います。 -- 鈴川直美 / 株式会社ビットスコープ E-mail: suzuk****@bitsc***** http://www.bitscope.co.jp/