НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
37 of 152 menu

Таблица oc_customer_reward

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

Поля

Поле Тип данных Описание
customer_reward_id int Уникальный идентификатор записи в таблице. Автоинкремент.
customer_id int Внешний ключ, связывающий запись с конкретным клиентом. Ссылается на oc_customer.
order_id int Внешний ключ, указывающий на заказ, с которым связана операция (начисление за покупку или списание для оплаты). Ссылается на oc_order. Может быть 0, если баллы начислены не за заказ (например, за регистрацию).
description text Текстовое описание операции. Объясняет, за что были начислены или списаны баллы (например, "Заказ #123", "Оплата бонусами заказа #123").
points int Количество баллов в операции. Положительное число означает начисление, отрицательное - списание.
date_added datetime Дата и время совершения операции.

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

Администратор магазина в настройках может установить правило: сколько бонусных баллов начисляется за каждую потраченную денежную единицу (например, 1 балл за каждые 10 рублей).

Когда клиент совершает покупку и его заказ переходит в статус, указанный в настройках для начисления баллов (например, "Завершен"), система рассчитывает сумму к начислению и создает запись в oc_customer_reward с положительным значением в поле points и ссылкой на order_id.

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

Текущий баланс баллов клиента ⁅b⁆не хранится⁅/b⁆ в этой таблице явно. Он всегда вычисляется как сумма (SUM()) всех значений в поле points для данного customer_id. Это позволяет всегда иметь актуальную сумму, основанную на полной истории операций.

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

Получить полную историю начислений и списаний, а также текущий баланс для клиента с customer_id = 5:

SELECT *, SUM(points) OVER (PARTITION BY customer_id ORDER BY date_added) AS running_balance FROM oc_customer_reward WHERE customer_id = 5 ORDER BY date_added;

Получить только текущий баланс баллов клиента:

SELECT SUM(points) AS total_points FROM oc_customer_reward WHERE customer_id = 5;

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

  • таблицу oc_customer,
    в которой хранятся основные данные клиентов
  • таблицу oc_order,
    с которой связаны операции начисления баллов
  • таблицу oc_customer_transaction,
    которая работает по схожему принципу для учета денежных транзакций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить