根据 5 个不同的表生成一行 rails 3.0.1 ruby 1.8.7

generating a row depending on 5 distinct tables rails 3.0.1 ruby 1.8.7

我必须生成一个需要比较来自 5 个表(用户、订单、产品、评级、订单产品)的数据的报告,如下所示:

用户有很多订单(user_id 个订单) Product本身有很多children通过字段father_id
用户和产品有很多评级(user_id 和 product_id 评级)
Order 和 Product 通过 OrderProducts(OrderProduct 中的 order_id 和 product_id)

我需要在产品和用户不在评级中的每个用户带来产品中的所有寄存器

换句话说:将所有购买但未评价产品的用户和买家未评价的产品结合起来

最重要的是,当 father_id 不为空时,我需要带上那些产品的父亲。

EDIT1:所以,我编辑了模特的名字,我想得更清楚了:我需要带来订单中未评级的产品,并向买家展示(与相关订单相关的用户) )

我现在想得再清楚不过了,对不起。

编辑 2:https://gist.github.com/rmatuoka/c73e41a2aa475d3b5a29

如果你投反对票,至少告诉我原因:)

感谢关注

这应该非常接近...请仔细检查所有 table 和字段名称,因为我需要猜测其中的一些(例如,我假设 products table 有一个链接到下一个产品级别的属性 parent_id)。为了达到 运行 的规模,您肯定需要有正确的索引,甚至可能需要稍微调整您的设计。

@users_not_rated = User.find_by_sql("
  SELECT pp.product_id AS father_id, p.product_id, u.user_id FROM products p
  INNER JOIN products pp ON p.parent_id = pp.product_id
  INNER JOIN order_products op ON p.product_id = op.product_id
  INNER JOIN orders o ON op.order_id = o.order_id
  INNER JOIN users u ON o.user_id = u.user_id
  WHERE NOT EXISTS (
    SELECT r.user_id, r.product_id FROM ratings r
    WHERE r.user_id = u.user_id
    AND r.product_id = p.product_id
  )
")

基本上,将所有内容连接在一起,然后只有 return 行没有该用户和产品的评级。