2012-10-04 56 views
1

我有一系列产品可以包含或不包含增值税。我总是想向客户展示含增值税的价格,所以我有一个标志,说明价格是否包含增值税。目前,我在PHP中增加了增值税,这意味着排序有些不同,因为MySQL按基本价格排序,有时增值税可能会导致结果失序。MySQL - 在需要时添加增值税

然后,我想在MySQL查询中自动将增值税添加到需要的地方。我怎样才能做到这一点?

我的产品表是这样的:

product_id, product_dayprice, product_weekprice, product_includevat 

product_includevat仅仅是一个布尔即1或0 ...增值税被存储为一个PHP变量

我排序的代码看起来像这样被设计把产品为0的价格底

CASE product_daypriceWHEN 0 then 40000 ELSE product_dayprice END 

回答

3

如果product_include_vat是一个布尔值字段,然后它会像

一样简单
SELECT product_weekprice + (product_weekprice * vat_rate * product_includevat) 

如果includevat字段为false,则它将计算为整数0,并且您的数据源在乘法中被清零。

+0

完美...我可以将它分配回原始字段名称,以便通过'product_weekprice'访问它,还是必须创建一个新的名称? – Chris

+0

你可以,但考虑到当政治风向发生变化时,增值税率可能会发生变化,您可能需要存储标准基本税率,并在其他地方存储基本金额+增值税,以防政客打击比平时更多的热气。 –

0

您不应该在每一步都动态计算增值税。计算一次,并保存您拥有的所有数据,例如netto和VAT作为单独的值,或brutto和netto,或brutto和VAT。

为什么冗余?一:增加价格时舍入错误。二:即使增值税税率发生变化,一些数据在销售后仍然是永久性的。这不适用于您当前价格的数据库,但对于您的客户历史记录,您必须知道销售时包含了多少增值税。如果您每次都重新计算,并且增值税税率增加,那么您的税务办公室就会付出太多代价。

+0

在这种情况下,销售历史是另一张表格,价值无论如何都被复制,因此......销售仍然存在。动态执行没有问题,我确实相信它是一个冗余来存储价格与增值税。更难以挽救。 – Miguel