Mysql插入当前结果然后插入新结果

时间:2011-05-26 15:46:47

标签: php mysql insert

我有一个ajax实时表编辑来改变我当前产品的价格。我想要做的是在更改之前插入价格,然后插入更新后的价格。原因是因为我想显示更新价格的变化。示例:当前价格为54.00美元,我将其更改为57.00美元。我需要记录全天的价格变化,并显示3.00美元的价格变化。如果插入更新的价格,我将如何插入旧价格。感谢。

2 个答案:

答案 0 :(得分:1)

我建议你像这样制作价格表

table price
-----------
id          unsigned integer autoincrement primary key
article_id  integer /*link to articletable*/
valid_from  date
valid_until date
amount      decimal(10,2) /*always use decimal for money*/

然后,您可以使用以下4个查询插入新价格。

/*hide changes from the rest of the world until we are done*/
START TRANSACTION

/*invalidate the latest existing price in the price table*/
UPDATE price 
SET valid_until = DATESUB(CURDATE(),INTERVAL 1 DAY) 
WHERE article_id = '100' ORDER BY valid_until DESC LIMIT 1
/*the order by selects the latest item, the limit does only 1 update*/

/*insert the new price*/
INSERT INTO PRICE (article_id, valid_from, valid_until, amount) 
VALUES ('100', CURDATE(), DATEADD(CURDATE(),INTERVAL 100 YEAR), '99.95')

/*show changes to the rest of the world*/
COMMIT

您需要交易,否则您可能会面临价格表不同步的风险。在价格表上将表格类型设置为InnoDB。 您的其他表格可以是MyISAM,只需确保price表格为InnoDB

您现在可以使用以下方式选择价格:

SELECT article.name
  ,price.amount as price_per_item
  ,purchase.qty as number_of_items
  ,price.amount * purchase.qty as amount 
FROM purchase
INNER JOIN article ON (article.id = purchase.article_id)
INNER JOIN price ON (price.article_id = purchase.article_id) 
  AND (purchase.transactiondate BETWEEN price.valid_from and price.valid_until)
WHERE purchase.id = '458'

答案 1 :(得分:0)

你可以保持两个不同的领域。像old_value和new_value。在一天结束时,您可以计算值并打印差异。