2014-09-19 106 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列。