如何加入产品及其特性
我有两张桌子。 产品(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表分区。它能提高性能吗?
谢谢。
答案 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