2013-05-09 93 views
0

我在寫一個函數來計算訂單總額。我正在查看一個SQL來獲取這些信息,而不是像現在那樣使用php來破解它。複雜的SQL搞清楚如何拉取最新的數據

每個訂單都有每個商品的訂單優惠。由於我們通常有訂單修改,因此可能會有多個版本的訂單報價。最高報價版本是我們用於計算價格的數據。

現在,這裏是我用拉的所有訂單提供了單獨的訂單SQL:

SELECT * FROM order_offer offer 
WHERE offer.order_id = ? 
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id =  
offer.offer_id) 

現在,我需要建立一個類似於SQL摳券每張訂單的報價。每個訂單優惠可能有多張優惠券或根本沒有優惠券。

下面是我用它來發現可以應用的優惠券(如果它幫助)爲了有效報價

SELECT * FROM order_offer offer 
WHERE offer.order_id = ? 
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id = 
offer.offer_id) 
AND offer.offer_id NOT IN 
(
SELECT o.offer_id 
FROM order_offer o LEFT JOIN order_coupons c ON o.offer_id = c.offer_id 
WHERE o.offer_version = offer.offer_version 
AND o.offer_version = c.offer_version 
AND c.order_coupon_stackable = 0 
AND o.order_id = offer.order_id 
) 

謝謝你的幫助SQL!

回答

1

你就不能只是這個(它會給你優惠券到最後報價):

SELECT * FROM order_offer offer 
LEFT JOIN order_coupons c ON offer.offer_id = c.offer_id AND offer.offer_version = c.offer_version 
WHERE offer.order_id = ? 
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id =  
offer.offer_id) 
+0

這幾乎是完美的,但左連接需要通過offer_id和offer_version。這目前拉所有優惠券 – 2013-05-10 03:14:49

+0

你是對的。固定 – cha 2013-05-10 03:43:11