Таблица 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,
которая определяет группы покупателей