2014-09-19 55 views
0

我面临着以下问题之间复杂的数据模型的关系,我还是相当新的轨道,我需要你的帮助导轨 - 3个表

我有一个表SALES有4列:PRODUCT_ID,销售产品的数量,销售者和销售日期。

我还有其他的表PRODUCT_PRICE的产品列表,价格和一个月(以月价格变化)

最后我还有其他的表产品在那里我有产品,说明,和产品的manufactor_id。

我需要进行2个查询: - 上月销售更多产品的前10家制造商 - 上个月销售收入前10名(使用PRODUCT_PRICE表计算)的前10家销售商。

我该如何在Ruby on Rails中使用ActiveRecord来做到这一点,我想用rails关联来做到这一点。

谢谢!

+0

模型之间的关系是什么?你可以把这个代码放到你的问题中吗?还请'生产'have_many'产品? – Anthony 2014-09-19 12:37:06

+0

你会如何在SQL中做到这一点? – akonsu 2014-09-19 12:37:15

+0

是的,制造商可以有许多产品。我还没有模型的代码 – DominikDe 2014-09-19 12:44:35

回答

0

未经测试并相当困难没有任何进一步的信息,但如果你有三种模式设置:

为先,在此基础上查询:

SELECT manufacturer_id FROM products 
LEFT JOIN sales ON sales.product_id = products.id 
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) 
LIMIT 10 

这将是这样的(您正在使用的Rails的版本你不提)

@top_manufacturers = Product.find(:all, 
            :select=> 'manufacturer_id FROM products', 
            :joins => 'LEFT JOIN sales ON sales.product_id = products.id', 
            :conditions => 'YEAR(created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)', 
            :limit => 10) 

对于第二

SELECT sales.seller_id, SUM(sales.quantity), SUM(product_prices.price) FROM sales 
LEFT JOIN products ON products.id = sales.product_id 
LEFT JOIN product_prices ON product_prices.product_id = products.id 
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) 
LIMIT 10 

@top_sellers = Sale.find(:all, 
         :select => 'sales.seller_id, SUM(sales.quantity), SUM(product_prices.price)', 
         :joins => 'LEFT JOIN products ON products.id = sales.product_id LEFT JOIN product_prices ON product_prices.product_id = products.id', 
         :conditions => 'YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)', 
         :limit => 10) 

如果你没有在所有的表created_atupdated_at列,那么你应该将它们添加 - Rails的填充他们自动的,虽然我想我应该把你的month列。