Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
60 of 152 menu
Внимание! Репетиторство по Python! Осталось последнее место! Стоимость: 20$ за занятие 1.5 часа. Жми для подробностей!

Таблица oc_product_discount

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

Поля

Поле Тип данных Описание
product_discount_id int Уникальный идентификатор правила скидки.
product_id int Внешний ключ, который связывает скидку с конкретным товаром. Ссылается на таблицу oc_product.
customer_group_id int ID группы покупателей, для которой действует данная скидка. Ссылается на таблицу oc_customer_group. Позволяет назначать разные скидки разным группам (например, оптовикам и розничным клиентам).
quantity int Минимальное количество товара в корзине, начиная с которого применяется данная скидка.
priority int Приоритет правила. Если для одного товара и одной группы покупателей есть несколько скидок с разным количеством, система выберет правило с наивысшим приоритетом (1 выше 2). Если приоритеты равны, выберется скидка с наибольшей величиной скидки.
price decimal(15,4) Цена со скидкой, которая будет применена при выполнении условия по количеству (quantity).
date_start date Дата начала действия скидки. Если значение равно 0000-00-00, правило действует бессрочно до даты окончания.
date_end date Дата окончания действия скидки. Если значение равно 0000-00-00, правило действует бессрочно с даты начала.

Как это работает

В админ-панели OpenCart, в карточке редактирования товара, есть вкладка "Скидки". Там администратор может добавить новое правило, указав группу клиентов, минимальное количество, приоритет и новую цену.

Когда покупатель добавляет товар в корзину, система проверяет общее количество этого товара. Затем она ищет в таблице oc_product_discount все правила для данного product_id и customer_group_id текущего пользователя, где значение quantity меньше или равно количеству в корзине. Из всех подходящих правил выбирается одно с наивысшим приоритетом и наибольшей скидкой (самой низкой ценой).

Важно отметить, что скидки применяются только к общей сумме за конкретный товар и не суммируются между собой. Для одного товара может быть активно только одно правило скидки из этой таблицы в момент расчета корзины.

Поля date_start и date_end позволяют настроить акционные скидки, действующие в определенный период времени.

Пример SQL-запроса

Посмотреть все активные скидки для товара с ID 42 можно следующим запросом:

SELECT pd.*, cg.name as customer_group FROM oc_product_discount pd LEFT JOIN oc_customer_group cg ON (pd.customer_group_id = cg.customer_group_id) WHERE pd.product_id = 42 AND (pd.date_start = '0000-00-00' OR pd.date_start < CURDATE()) AND (pd.date_end = '0000-00-00' OR pd.date_end > CURDATE()) ORDER BY pd.priority ASC, pd.quantity ASC;

Смотрите также

  • таблицу oc_product,
    которая содержит основную информацию о товарах
  • таблицу oc_product_special,
    которая хранит информацию об акционных ценах
  • таблицу oc_customer_group,
    которая определяет группы покупателей