0

好的,所以我想在我的 Rails 应用程序中提出一些复杂的查询。我有四个表:Clients、Projects、Invoices、Invoice_Line_Items。我正在尝试从所有这些表中获取某些数据位,并将其显示在我的应用程序的“报告”类型视图中。这是四个表的结构:

客户

 |  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 比较陌生,这是一个相当复杂的查询(至少在我的脑海中)。请让我知道是否有一个我忽略的更简单的解决方案,或者我是否过于复杂。如果我需要在我的控制器中执行多个查询,那很好,我只是想看看我是否可以通过一个 sql 调用逃脱。我很确定我可以用一些子查询很容易地做到这一点,但我不确定如何在 Rails 的控制器中编写这些子查询。

感谢您提供的任何帮助或指导,如果这个问题只是令人发指或只是让我知道,我会删除它并去搜索更多谷歌(已经尝试无济于事)。

4

1 回答 1

0

好的,我最终自己想出了一个解决方案。不太确定这是最好的解决方案....感觉很重很乱,但我只是在控制器中创建了很多对象来获取从数据库中提取数据所需的 sql 语句。我基本上每列都有一个对象(column而不是每一行)。让我知道是否有人能找到更好的解决方案。

于 2012-11-13T15:08:30.950 回答