Rails 3 - 带有连接和计数的复杂查询,可能的子查询?

时间:2012-11-12 21:57:59

标签: ruby-on-rails-3 controller subquery

好的,所以我有一些复杂的查询,我想在我的rails应用程序中提出。我有四个表:客户,项目,发票,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,该表是所有已存档发票的总和
  6. 我对Rails相对较新,这是一个相当复杂的查询(至少在我脑海中)。如果有一个更简单的解决方案,我可以忽略或者如果我只是让它复杂化,请告诉我。如果我需要在我的控制器中进行多次查询,那很好,我只是想看看我是否可以通过一个SQL调用来逃脱。我很确定我可以通过一些子查询很容易地做到这一点,但我不确定如何在Rails中的控制器中编写它们。

    感谢您提供的任何帮助或指示,如果这个问题只是令人愤慨或者只是让我知道,我将删除它并更多地搜索谷歌(已经尝试过无效)。

1 个答案:

答案 0 :(得分:0)

好的,我最终自己找出了解决方案。不太确定它是最好的解决方案....感觉很沉重和搞乱但我只是在控制器中创建了很多对象来获取我需要从数据库中提取数据的sql语句。我基本上每列都有一个对象(不是每一行)。如果有人能找到更好的解决方案,请告诉我。