如何加入产品及其特征

时间:2016-03-16 16:54:03

标签: sql ruby-on-rails postgresql activerecord orm

如何加入产品及其特性

我有两张桌子。 产品(ID,标题,价格,created_at,updated_at等) 和 ProductCharacteristic(id,product_id,sold_quantity,date,craated_at,updated_at等)。

我应该在一段时间内显示产品表(标题是product.id,product.title,product.price,sold_quantity),并按标题中的任何字段排序。

我不能写查询

现在我有以下查询

 > current_project.products.includes(:product_characteristics).group('products.id').pluck(:title, 'SUM(product_characteristics.sold_quantity) AS sold_quantity')

(45.4ms) SELECT "products"."title", SUM(product_characteristics.sold_quantity) AS sold_quantity FROM "products" LEFT OUTER JOIN "product_characteristics" ON "product_characteristics"."product_id" = "products"."id" WHERE "products"."project_id" = $1 GROUP BY products.id  [["project_id", 20]]

请帮我通过orm编写查询(添加 where 的日期和顺序)或编写原始sql查询。

我使用采摘。它返回数组数组(不是哈希数组)。当然不是那么好。

product_characteristics.date字段的范围是product_id唯一的。但请给我两个例子(有这个条件,没有它来满足我的好奇心)。

我使用postgresql和rails 4.2.x. 附:顺便说一句,ProductCharacteristic表将有很多记录(比一百万个)。我应该使用postgresql表分区。它能提高性能吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用select而不是count,并且该属性可以作为product.sold_quantity

访问

查询变为

products = current_project.products.joins(:product_characteristics).group('products.id').select(:title, 'SUM(product_characteristics.sold_quantity) AS sold_quantity')

products.first.sold_quantity#=>作品

要订购,您只需添加订单子句

即可
products = products.order(id: :asc)

products = products.order(id: :desc)
例如

对于哪里

products = products.where("created_at > ?", 2.days.ago)
例如

您可以在第一行之后链接sql子句,这无关紧要因为只有在您实际使用检索到的集合时才会启动查询。 所以你也可以做像

这样的事情
if params[:foo]
  products = products.order(:id)
end
相关问题