Таблица oc_product_special
Таблица oc_product_special предназначена для управления акционными предложениями на товары. Она позволяет устанавливать специальные цены, которые действуют в указанный период времени или для определенных групп клиентов.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
product_special_id |
int |
Уникальный идентификатор акционной цены. |
product_id |
int |
Внешний ключ, который связывает акционную цену с конкретным товаром. Ссылается на таблицу oc_product.
|
customer_group_id |
int |
ID группы покупателей, для которой действует акционная цена. Ссылается на таблицу oc_customer_group. Если значение 0 - акция действует для всех групп.
|
priority |
int |
Приоритет акционной цены. Если для товара установлено несколько акционных цен с overlapping датами, будет применена цена с наивысшим приоритетом. |
price |
decimal(15,4) |
Акционная цена товара. Должна быть меньше обычной цены товара. |
date_start |
date |
Дата начала действия акционной цены. Формат: YYYY-MM-DD. Если 0000-00-00 - акция начинает действовать сразу.
|
date_end |
date |
Дата окончания действия акционной цены. Формат: YYYY-MM-DD. Если 0000-00-00 - акция действует бессрочно.
|
Как это работает
В админ-панели OpenCart при редактировании товара есть вкладка "Акции", где можно добавить специальные цены. Каждая запись в этой таблице представляет собой одно акционное предложение для конкретного товара.
При отображении товара на сайте система проверяет наличие активных акционных цен для данного товара и текущей группы пользователя. Если найдено несколько акционных цен, применяется та, у которой выше приоритет (priority).
Акционная цена считается активной, если текущая дата находится между date_start и date_end (включительно). Если даты не указаны (0000-00-00), акция считается всегда активной.
Система также учитывает группу покупателя. Можно создать акционные предложения, доступные только определенным группам клиентов (например, "Оптовикам" или "Постоянным клиентам").
Пример SQL-запроса
Получить все активные акционные цены для товара с ID 42:
SELECT ps.*, cg.name as customer_group
FROM oc_product_special ps
LEFT JOIN oc_customer_group cg ON (ps.customer_group_id = cg.customer_group_id)
WHERE ps.product_id = 42
AND (ps.date_start = '0000-00-00' OR ps.date_start <= CURDATE())
AND (ps.date_end = '0000-00-00' OR ps.date_end >= CURDATE())
ORDER BY ps.priority ASC;
Смотрите также
-
таблицу
oc_product,
которая содержит основную информацию о товарах -
таблицу
oc_customer_group,
которая хранит группы покупателей -
таблицу
oc_product_discount,
которая хранит скидки на товары