Таблица oc_coupon_history
Таблица oc_coupon_history предназначена для записи фактов использования купонов в заказах. Каждая запись в этой таблице связывает конкретный купон с конкретным заказом и клиентом, который его применил.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
coupon_history_id |
int |
Уникальный идентификатор записи в истории использования купонов. Автоинкремент. |
coupon_id |
int |
Внешний ключ, связывающий запись с конкретным купоном. Ссылается на таблицу oc_coupon.
|
order_id |
int |
Внешний ключ, идентификатор заказа, в котором был использован купон. Ссылается на таблицу oc_order.
|
customer_id |
int |
Внешний ключ, идентификатор клиента, который применил купон. Ссылается на таблицу oc_customer.
|
amount |
decimal(15,4) |
Сумма скидки, которая была применена к заказу с помощью данного купона. |
date_added |
datetime |
Дата и время применения купона в заказе. |
Как это работает
Администратор создает купон в админ-панели OpenCart (Маркетинг → Купоны), задавая ему код, тип скидки (процент, фиксированная сумма, бесплатная доставка), сумму, ограничения и количество использований.
Когда клиент вводит код купона на странице оформления заказа и нажимает "Применить", система проверяет его валидность (срок действия, количество оставшихся использований, соответствие условиям). Если купон действителен, скидка применяется к заказу.
После успешного применения купона и подтверждения заказа, в таблицу oc_coupon_history добавляется новая запись. Эта запись фиксирует, какой купон (coupon_id), каким клиентом (customer_id), в каком заказе (order_id) и на какую сумму скидки (amount) был использован.
Главная практическая цель этой таблицы - отслеживание и ограничение количества использований купона. При каждой попытке применить купон система проверяет количество уже существующих записей с данным coupon_id в oc_coupon_history и сравнивает его с лимитом, указанным в таблице oc_coupon. Если лимит исчерпан, купон становится недействительным.
Пример SQL-запроса
Посмотреть историю использования конкретного купона с информацией о заказах и клиентах:
SELECT
ch.coupon_history_id,
ch.date_added,
ch.amount,
c.code as coupon_code,
o.order_id,
o.total as order_total,
CONCAT(cust.firstname, ' ', cust.lastname) as customer_name
FROM oc_coupon_history ch
LEFT JOIN oc_coupon c ON (ch.coupon_id = c.coupon_id)
LEFT JOIN oc_order o ON (ch.order_id = o.order_id)
LEFT JOIN oc_customer cust ON (ch.customer_id = cust.customer_id)
WHERE ch.coupon_id = 7
ORDER BY ch.date_added DESC;
Смотрите также
-
таблицу
oc_coupon,
которая хранит основные данные и правила купонов -
таблицу
oc_order,
которая содержит информацию о заказах -
таблицу
oc_order_total,
где также фиксируется итоговая сумма скидки по купону в рамках заказа