2011-06-07 70 views
1

我有兩個表這樣的:一個SQL更新查詢問題

Products(productID,categoryID,price) 
MarginOfProfit(categoryID,rate) 

任何時候我們要改變的一個類別的產品價格,我們來看看他們的變化率和aplly它原來的價格。

例如:

ProductID | CategoryID | Price 
     1   1  105 
     2   1  105 


CategoryID | Rate 
     1 0.05 

在這個例子中,我們原來的價格是100所以,當我的客戶說:「改變所有價格10%」,我必須先計算原始價格,並增加10%,比我們的價格會110

我試着寫一個SQL UPDATE查詢,但不能。你有什麼建議?有沒有辦法在MySQL中自動執行它。我的意思是定義一些程序或別的東西..

感謝所有誰將會盡力幫助

+0

你想通過PHP或MySQL做呢? – k102 2011-06-07 13:31:28

回答

2

這將是最好有加價後,您的產品表中的列OriginalPrice,而不是價格。

ProductID | CategoryID | OriginalPrice 
     1   1    100 
     2   1    100 

然後,你可以做選擇時的加價(或作視圖):

SELECT *, (OriginalPrice * (1 + Rate)) AS Price 
    FROM Products 
    JOIN MarginOfProfit ON Products.CategoryID = MarginOfProfit.CategoryID; 

另外,如果你無法改變表結構(這將是不幸的),你可以這樣執行UPDATE:

UPDATE Products 
    JOIN MarginOfProfit ON Products.CategoryID = MarginOfProfit.CategoryID 
    SET Price = Price/(1 + Rate) * (1 + YOUR_NEW_RATE) 
WHERE Products.CategoryID = 1; 

...其中YOUR_NEW_RATE將是你設置新的利率。然而,這必須執行之前更改MarginOfProfitrate值。如果您想要,您可以創建一個採用NewRate參數並執行UPDATE s的stored procedure

+1

它工作得很好。 Thanx Jordan。 – dreamend 2011-06-07 15:22:50

4

嗯......

UPDATE Price SET Price=Price/(1+OldRate)*(1+NewRate) WHERE CategoryID = 1 

可能最簡單的SQL語句,假設你把所有的值。

這可能可能使用在「CategoryRates」觸發器來實現?表,但它需要兩個速率字段(OldRate,NewRate)

+0

這不會做什麼作爲你沒有使用原來的價格 – Dalen 2011-06-07 13:34:44

+0

更新問:簡單地恢復由舊率 – 2011-06-07 13:41:03

+0

和新費率 – Dalen 2011-06-07 13:45:29

0

試試這個:

UPDATE FROM Products AS p 
JOIN MarginOfProfit as m ON p.CategoryID = m.CategoryID 
SET p.Price = p.Price + p.Price*m.Rate