Что нового

Помощь PHP/MYSQL (1 Viewer)

  • Автор темы Maxim Mozes
  • Дата начала
Maxim Mozes

Maxim Mozes

Участник
Регистрация
27 Мар 2021
Сообщения
96
Реакции
205
Есть код
PHP:
protected function redeemed_codes() {

        $total = ['discount_codes' => 0, 'redeemable_codes' => 0];

        $chart = [];
        $result = database()->query("SELECT `type`, COUNT(`type`) AS `total`, DATE_FORMAT(`datetime`, '{$this->datetime['query_date_format']}') AS `formatted_date` FROM `redeemed_codes` WHERE `datetime` BETWEEN '{$this->datetime['query_start_date']}' AND '{$this->datetime['query_end_date']}' GROUP BY `formatted_date`, `type`");
        while($row = $result->fetch_object()) {
            $row->formatted_date = $this->datetime['process']($row->formatted_date);

            if(isset($chart[$row->formatted_date])) {
                $chart[$row->formatted_date] = [
                    'discount' => $row->type == 'discount' ? $chart[$row->formatted_date]['discount'] + $row->total : $chart[$row->formatted_date]['discount'],
                    'redeemable' => $row->type == 'redeemable' ? $chart[$row->formatted_date]['redeemable'] + $row->total : $chart[$row->formatted_date]['redeemable'],
                ];
            } else {
                $chart[$row->formatted_date] = [
                    'discount' => $row->type == 'discount' ? $row->total : 0,
                    'redeemable' => $row->type == 'redeemable' ? $row->total : 0,
                ];
            }

            $total['discount_codes'] += $row->type == 'discount' ? $row->total : 0;
            $total['redeemable_codes'] += $row->type == 'redeemable' ? $row->total : 0;
        }

        $chart = get_chart_data($chart);

        return [
            'total' => $total,
            'chart' => $chart,
        ];

    }
  1. Цикл while проходит по каждой строке результата запроса и извлекает объект $row.
  2. Далее происходит форматирование даты в объекте $row с помощью функции $this->datetime['process']($row->formatted_date).
  3. Затем происходит проверка, существует ли уже запись для данной отформатированной даты в массиве $chart. Если существует, то происходит обновление счетчиков для типов 'discount' и 'redeemable' в массиве $chart.
  4. Если записи для данной даты нет в массиве $chart, то создается новая запись и устанавливаются счетчики для типов 'discount' и 'redeemable'.
  5. После этого обновляются общие счетчики для типов 'discount' и 'redeemable' в массиве $total.
Есть пример запроса в sql в котором есть ошибка
SQL:
CREATE TABLE `redeemed_codes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`type` enum('discount','redeemable') NOT NULL,
`datetime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Проблема в том что поле в базе данных `type` enum('discount','redeemable') NOT NULL, выбирает при любом варианте только discount первое значение, нужно поправить чтобы и при сортировки в php коде так же по значению нужному выводилось и redeemable, нужна правка в sql запросе, помогите, за помощь подкину монет на RU банк любой.
 
Есть пример запроса в sql в котором есть ошибка
Это запрос на создание таблицы, в нем нет ошибки.
Проверяйте как таблица заполнена данными, есть ли там вообще в этом столбце значение "redeemable"
 
Это запрос на создание таблицы, в нем нет ошибки.
Проверяйте как таблица заполнена данными, есть ли там вообще в этом столбце значение "redeemable"
discount - это поле отвечает за промокоды.
redeemable - это поле отвечает за купоны.
При активации redeemable на сайте, все гуд, а вот в статистику заносится что активировали discount, оно берет только первое значение в `type` enum('discount','redeemable') NOT NULL,
  2024 03 27 142613
 
discount - это поле отвечает за промокоды.
Это НЕ поле, это его значение. Поле - type.
И раз оно NOT NULL, то, если при создании записи в таблице значение для type не передается, то записывается первое из возможных значений.

Проверяйте как заполняется данными эта таблица.
 

Пользователи, просматривающие данную тему

Верх