2016-01-01 6 views
-2

Допустим, клиент заказал 3 продуктаMySql как автоматически применять скидки?

Заказать продукты стол:

id | order_id | product_id | price 
1 | 1  |  2  | 10 
2 | 1  |  2  | 10 
3 | 1  |  2  | 10 

Приказы таблица:

id | total_price 
1 |  30 

и теперь я хочу MySql применять специальные скидки, что делает 3-й пункт бесплатно в течение определенного периода времени. Таким образом, в результате я получу

id | total_price 
1 |  20 

Я использую MySql 5.6, PHP (Symfony 2, доктрина ОРМ) и интересно, что это лучший способ для создания и обработки таких сценариев.

+4

Эта логика не принадлежит в тузд слое, он принадлежит в PHP слоя. –

+0

Все цены 10, так что общее количество всего, меньше 10. – Strawberry

ответ

0

Чтобы использовать скидки в периоды времени, вам необходимо разработать код для поддержки этого. Конструкция может выглядеть следующим образом:

Создать дисконтную таблицу:

CREATE TABLE discount(
    discount_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    rule VARCHAR(400), 
    start_date DATE, 
    end_date DATE 
); 

Скидка rule может быть JSON строка, содержащая инструкции. Эти инструкции могут различаться каждый раз, поэтому таким образом ваша таблица будет одинаковой все время. Возможная структура для JSON для этого скидка:

{"ruleType":"multipleProductDiscount","ruleValue":"3"} 

Вы можете использовать CASE заявление применять различные правила скидки при обработке их в коде.

Дата начала/окончания - это всего лишь способ предотвратить загрузку и обработку всех правил каждый раз. Таким образом, запрос извлечения данных из таблицы discount только получает активный данные вместо:

SELECT * FROM discount WHERE somedate BETWEEN start_date AND end_date; 
+0

Спасибо за ответ! Мысль о таких функциях, как использование триггеров или хранимых процедур, но они, похоже, работают над простыми случаями или «жестко закодированы» в mysql. Тем не менее в моей БД у меня есть 2 типа скидок. 1. Простая скидка - n процентов для проведения или специальных предложений. 2. Покупайте n продуктов (одного типа или категории) и получите один бесплатный. И мне нужно создать мастер, чтобы пользователи могли вставлять свои собственные сценарии скидок. Постарайтесь двигаться таким образом. –

+0

Хранимая процедура с триггером также может обрабатывать JSON (нет причин, почему бы и нет). Посмотрите на MariaDB (по одной замене MySQL) на колонки JSON для легкого доступа к данным JSON. –