sql >> データベース >  >> RDS >> Mysql

Rails-複数の関係にわたってデータを効率的にプルして計算します

    複数購入したユーザーIDのリストを取得するには、次のようにします。これにより、1つのテーブルにのみアクセスできます。

    user_ids = PurchasedDeal.count(:group => :user_id, :having => 'count_all > 0').keys
    

    その後、次のコマンドでこれらすべてのユーザーを取得できます:

    users = User.find user_ids
    

    カウンターキャッシュで物事をスピードアップできます。ユーザーモデルに、オプション:counter_cache => trueを追加します has_manyに 購入した取引のための協会。ユーザーテーブルと初期化に追加の整数列が必要になります。これは、移行では次のようになります。

    add_column :users, :purchased_deals_count, :integer, :null => false, :default => 0
    User.each { |u| User.reset_counters u, :purchased_deals }
    

    それが邪魔にならないようになると、それははるかに簡単になります:

    users = User.all :conditions => 'purchased_deals_count > 0'
    

    Railsは、ほとんどの標準的な操作で、列を最新の状態に保ちます。

    合計金額を取得するには、常に参加が必要です。または、取引価格のハッシュを作成して、Rubyで面倒な処理を行うこともできます。私はSQLの専門家ではありませんが、PurchasedDealで価格を保存することで、結合を取り除くことができる可能性があります。それ以外の場合は、結合を使用してそれを行う方法は次のとおりです。

    user_id_to_price = PurchasedDeal.sum 'deal.price', :include => :deal, :group => :user_id
    

    :conditions => ['user_id IN (?)', users]のようなものを追加することで、必要なユーザーだけでそれをフィルタリングできます。 。 (users IDのリストにすることも、ユーザーオブジェクトにすることもできます。)



    1. INOUTパラメータを使用したOracleの例のストアドプロシージャ

    2. 実数vs.浮動小数点vs.お金

    3. エラー'指定された場所にサブレポートが見つかりませんでした。サブレポートが公開されていること、および名前が正しいことを確認してください。

    4. オプションおよび必須フィールドを含むフォームの投稿