Задать вопрос

Как реализуют прайсы?

Добрый день. Суть вопроса: Есть база данных, в неё вносим информацию о том что 01.05.2015 какой-то человек купил(назовём это ЧЕК):
  • позиция 1 - 500р
  • позиция 2 - 600р
  • позиция 3 - 100р

Проходит месяц, т.и уже 01.06.2015. Цены в прайсе меняются.
  • позиция 1 - 200р
  • позиция 2 - 300р
  • позиция 3 - 200р

Теперь мне нужно посмотреть этот чек за 01.05.2015. Каким образом это делается обычно?
  • Делается некая ревизия прайса. Тут, если мне понадобится расчёт всех чеков за месяц или год, то при большом кол-ве ЧЕКов это будет работать медленно.
  • В отдельную таблицу записывается информация о том что человек купил три товара по такой-то цене. В этом случае получается большая избыточность информации, на сколько я понимаю.
  • ?
  • Вопрос задан
  • 316 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
DevMan
@DevMan
Делается то, что у вас названо "ревизия прайса".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mramor
@mramor
нечего о себе рассказывать.
Есть таблица orders. в ней что за человек, контакты, дата покупки.
Для примера:
id | name | date
------------------
17| Василий | 01.05.2015

Есть таблица purchases, в ней построчно что за покупка, цена, и главное идентификатор из таблици orders. Т.е., три покупки = три записи.

id | order_id | price | name
------------------------------
1 | 17 | 100 | Трактор
2 | 17 | 200 | Велосипед
3 | 17 | 300 | Горшок

Если база, допустим sql, то делается запрос вроде такого:
select o.name as fio, o.date, p.price, p.name as product_name from orders o inner join purchases p ON(o.id=p.order_id) where o.date='01.05.2015'

на выходе получаем следующее:
fio | date | price | product_name
--------------------------------------
Василий | 01.05.2015 | 100 | Трактор
Василий | 01.05.2015 | 200 | Велосипед
Василий | 01.05.2015 | 300 | Горшок

Из o.* можно ничего не тащить, если вам нужен только ценник за дату. Либо использовать between в условии, если нужна выборка за диапазон дат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы