0

わかりましたので、レールアプリケーションで考えようとしている少し複雑なクエリがあります。Clients、Projects、Invoices、Invoice_Line_Items の 4 つのテーブルがあります。これらすべてのテーブルから特定のデータを取得して、アプリケーションの「レポート」タイプのビューに表示しようとしています。4 つのテーブルの構造は次のようになります。

クライアント

 |  id  |  name           |  archive  |
----------------------------------------
 |   1  |  Client 1       |     0     |
 |   2  |  Client 2       |     0     |

プロジェクト

 |  id  |  client_id  |  name           |  archive  |
------------------------------------------------------
 |   1  |      1      |  Project 1      |     0     |
 |   2  |      1      |  Project 2      |     1     |
 |   3  |      2      |  Project 3      |     0     |
 |   4  |      2      |  Project 4      |     1     |

請求書

 |  id   |  client_id  |  project_id  |  name           |  archive  |
----------------------------------------------------------------------
 |   1   |      1      |      1       |  Invoice 1      |     0     |
 |   2   |      1      |      1       |  Invoice 2      |     0     |
 |   3   |      1      |      2       |  Invoice 3      |     1     |
 |   4   |      1      |      2       |  Invoice 4      |     1     |
 |   5   |      2      |      3       |  Invoice 5      |     0     |
 |   6   |      2      |      3       |  Invoice 6      |     0     |
 |   7   |      2      |      4       |  Invoice 7      |     1     |
 |   8   |      2      |      4       |  Invoice 8      |     1     |

Invoice_Line_Items

 |  id   |  invoice_id  |  name         |  amount_due  |
---------------------------------------------------------
 |   1   |       1      |  Item 1       |     500      |
 |   2   |       1      |  Item 2       |     500      |
 |   3   |       2      |  Item 3       |     500      |
 |   4   |       2      |  Item 4       |     500      |
 |   5   |       3      |  Item 5       |     500      |
 |   6   |       3      |  Item 6       |     500      |
 |   7   |       4      |  Item 7       |     500      |
 |   8   |       4      |  Item 8       |     500      |
 |   9   |       5      |  Item 9       |     500      |
 |   10  |       5      |  Item 10      |     500      |
 |   11  |       6      |  Item 11      |     500      |
 |   12  |       6      |  Item 12      |     500      |
 |   13  |       7      |  Item 13      |     500      |
 |   14  |       7      |  Item 14      |     500      |
 |   15  |       8      |  Item 15      |     500      |
 |   16  |       8      |  Item 16      |     500      |

わかりました、これらの図が十分に理解できることを願っています。結果セットとして私が探しているのはこれです(上記のサンプルデータから取得したサンプルデータセット):

 |  clients.name   |  current_projects  |  archived_projects  |  total_amount_due  |  total_amount_paid  |
-----------------------------------------------------------------------------------------------------------
 |  Client 1       |  1                 |  1                  |  2000              |  2000               |
 |  Client 2       |  1                 |  1                  |  2000              |  2000               |

では、そこで何が起こっているかを以下に示します。

  1. アーカイブされていないクライアントをすべて取得する
  2. アーカイブされていないすべてのプロジェクトの数を取得する
  3. アーカイブされたすべてのプロジェクトの数を取得する
  4. アーカイブされていないすべての請求書の合計である、invoice_line_items テーブルからの total_amount_due の取得
  5. アーカイブされたすべての請求書の合計である、invoice_line_items テーブルから total_amount_paid を取得する

私は Rails に比較的慣れていませんが、これはかなり複雑なクエリです (少なくとも私の頭の中では)。私が見落としている簡単な解決策があるかどうか、またはそれを複雑にしすぎているかどうかを教えてください。コントローラーで複数のクエリを実行する必要がある場合は問題ありませんが、1 つの SQL 呼び出しで回避できるかどうかを確認したかっただけです。いくつかのサブクエリを使用してこれを非常に簡単に実行できると確信していますが、Rails のコントローラーにそれらを書き込む方法がわかりません。

あなたが提供できる助けや方向性に感謝します。この質問が法外なものであるか、私に知らせてください.

4

1 に答える 1

0

わかりました、まあ、私は自分で解決策を考え出すことになりました。それが最善の解決策かどうかはよくわかりません....重くて面倒ですが、データベースからデータをプルするために必要なSQLステートメントを取得するために、コントローラーにかなりの数のオブジェクトを作成しました。私は基本的に各列に1つのオブジェクトを持っています(各行ではなくcolumn )。誰かがより良い解決策を見つけられるかどうか教えてください。

于 2012-11-13T15:08:30.950 に答える