2011-05-26 73 views
0

我有一個ajax實時表編輯來更改我當前產品的價格。我想要做的是在更改它之前插入價格,然後插入更新後的價格。原因是因爲我想顯示更新價格的變化。例如:當前價格爲$ 54.00,我將其更改爲$ 57.00。我需要保持全天價格變化的日誌,並顯示價格變化3.00美元。我將如何去插入舊價格,同時更新的價格也插入。謝謝。Mysql插入當前結果,然後插入新結果

+0

只是做一個表,並插入一個新的記錄初始化每當有一個變化,並使用外鍵來跟蹤價格紀錄id..i希望能給你是一個想法,也有兩列一更新和一箇舊 – 2011-05-26 15:50:45

+0

爲什麼你不只是在數據庫中保持2價格而不是一個?否則,你可以在數據庫中添加一個新的「delta」字段嗎? – gurghet 2011-05-26 15:51:03

回答

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' 
0

你可以爲兩者保持不同的領域。像old_value和new_value一樣。在一天結束時,您可以計算出數值並打印出差異。