SQL更新查询问题

时间:2011-06-07 13:24:51

标签: php mysql

我有两张这样的表:

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

任何时候我们想要更改某个类别的产品价格,我们会查看其变化率并将其与原价相符。

例如:

ProductID | CategoryID | Price
        1            1     105
        2            1     105


CategoryID | Rate
        1    0.05

在这个例子中,我们原来的价格是100.所以当我的客户说:“更改所有价格%10”时,我必须先计算原价,并加上%10,比我们的价格为110.

我尝试编写SQL UPDATE查询,但不能。你能提出什么建议?是否可以在MySQL中自动执行此操作。我的意思是定义一些程序或其他东西..

感谢所有愿意帮助的人

3 个答案:

答案 0 :(得分:4)

嗯...

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

最简单的可能是SQL语句,假设您拥有所有值。

这可以使用'CategoryRates'上的触发器来完成吗?表,但它需要两个Rate字段(OldRate,NewRate)

答案 1 :(得分:2)

最好在Products表格中包含OriginalPrice列,而不是在加价后设置价格。

ProductID | CategoryID | OriginalPrice
        1            1             100
        2            1             100

然后你可以在SELECT(或观看)上做标记:

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

或者,如果您无法更改表结构(这将是不幸的),您可以执行这样的更新:

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将是您设置的新费率。但是,在更改rate表中的MarginOfProfit值之前,必须先执行。如果您愿意,可以创建一个stored procedure,它使用NewRate参数并执行UPDATE个。

答案 2 :(得分:0)

试试这个:

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