Mysql вставить текущий результат, а затем вставить новый результат - PullRequest
0 голосов
/ 26 мая 2011

У меня есть редактирование таблицы ajax для изменения цены моего текущего продукта. То, что я хочу сделать, это вставить цену, прежде чем я изменю ее, а затем вставить обновленную цену. Причина в том, что я хочу показать изменение в обновленной цене. Пример: текущая цена составляет $ 54,00, а я изменяю ее на $ 57,00. Мне нужно вести журнал изменения цен в течение дня и показывать изменение цены в 3 доллара. Как бы я вставил старую цену, в то время как обновленная цена также будет вставлена. Спасибо.

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Предлагаю вам составить таблицу цен вот так

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 голосов
/ 26 мая 2011

вы можете сохранить в разных полях для двух.Как old_value и new_value.В конце дня вы можете подсчитать значения и вывести разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...