2011-06-07 72 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