2

次の列を持つテーブル名トランザクションがあります

created_at        | debit | credit | balance | account_id
2012-2-2 02:22:22 | 3000  | 0      | 0       | 8
2012-2-2 07:22:22 | 500   | 1000   | 0       | 8
2012-2-2 09:22:22 | 0     | 8000   | 0       | 8

2012-3-3 19:17:20 | 1000  | 0      | 0       | 8
2012-3-3 04:02:22 | 0     | 8000   | 0       | 8

バランスを計算する前に私はする必要があります

  • トランザクションを日付で並べ替える(つまり毎日)
  • 次に、借方で並べ替えます(より高い借方が最初に来る必要があります)

account_idで区別される100万件のトランザクションがあります。そのようなシナリオでソートする効率的な方法は何ですか?

どんな答えでもいただければ幸いです。

4

1 に答える 1

2

これはこの質問によく似ています

Transaction.all(:order => "created_at DESC, debit DESC")

この種のクエリは、リレーショナルデータベースが得意とするものであり、適切なインデックスを作成することで、効率的になるはずです。

特定のアカウントの場合…</p>

Transaction.find_by_account_id(some_id, :order => "created_at DESC, debit DESC")

これがアカウントで適切なActiveRecordアソシエーションとして設定されている場合は、そこで順序を設定して、アソシエーションが常に優先順序で返されるようにすることができます。

class Account
    has_many :transactions, :order => "created_at DESC, debit DESC"
end

このように、アカウントにトランザクションを要求するAccount.find(12345).transactionsと、優先ソートで自動的に返されます。

于 2012-12-28T14:21:53.893 に答える