0

15 のカテゴリがあり、各カテゴリには 6 つのサブカテゴリがあり、最新の購入日に基づいて各サブカテゴリから 3 つのアイテムを見つける必要があるアイテム テーブルがあるとします。

category 1 ---> level 1 ---> 3 items with latest date
category 1 ---> level 2 ---> 3 items with latest date
  ...
  ...
  ...
category 15 ---> level 5 ---> 3 items with latest date
category 15 ---> level 6 ---> 3 items with latest date

私が試してみました

@categories.each do |value|
   @sub-categories.each do |value1|
      array = Item.find(:all, :conditions => ["customer_id IN (?) AND category_id = ? AND sub-category_id = ?", @customer, value.id, value1.id], :order => 'created_at DESC', :limit => 3)
            array.each do |value2|
                   @latest_item_of_each_customer << value2
            end
          end
        end

これを15カテゴリ×6サブカテゴリで90回繰り返すので、かなり時間がかかります。効率的なクエリで時間を短縮する方法を教えてください。

4

2 に答える 2

0

取り込んでいるデータ セットのサイズに応じて、このようなネストされたループを高速化する 1 つの方法は、それらの関連付けの一部を熱心に読み込むことです。

@categories = Category.all(:include => :sub_categories)

これにより、作成するクエリの量が減り、パフォーマンスが向上します。

熱心な読み込みについて詳しく知りたい場合は、このhttp://guides.rubyonrails.org/active_record_querying.html#eager-loading-associationsをご覧ください。

于 2013-05-22T08:20:41.083 に答える