Ответы пользователя по тегу MySQL
  • Разъясните задачу по тестовому заданию

    Remmi
    @Remmi
    1. "0" - это, похоже, значит, что товар НЕ ПОКУПАЛИ в этот день (если 0 для столбца sum)
    2. Схема БД уже описана в задании, осталось только сделать кодом
    (ts_day_start, pm_id, price, sum)
    Каждая строка - это событие покупки товара
    ts_day_start - таймстемп начала суток UTC+0
    pm_id - айдишник товара
    price - цена товара на момент покупки (в условных единицах)
    sum - потрачено на этот товар по этой цене за эти сутки

    3. БД лучше всё же спроектировать, поскольку сгенерированные строки надо где-то хранить (не в памяти же скрипта это делать)
    Ответ написан
    Комментировать
  • MySQL и PDO: как реализовать обновление нескольких столбцов с проверкой на непустые строки?

    Remmi
    @Remmi Автор вопроса
    Спасибо всем помогавшим. После разбора и анализа предложенных решений решили переделать структуру входящих данных - подстраивать запрос выходит слишком накладно и костыльно.
    Ответ написан
    Комментировать
  • Как в MySQL организовать запрос по нескольким вариантам для критерия?

    Remmi
    @Remmi Автор вопроса
    Спасибо за ответы!

    В анализе SQL запросы выглядят идентично. Проверил оба варианта на таблице с 301977 записями. Результаты такие:
    Минимальное время выполнения: @egor_nullptr - 0.1982, @Melkij - 0.2028
    Максимальное время выполнения: @egor_nullptr - 0.5384, @Melkij - 0.5366
    Среднее время: @egor_nullptr - 0.30854, @Melkij - 0.30861

    Из чего могу сделать предположение, что оба варианта работают по одинаковому механизму со слегка разной реализацией.

    Вопрос решён.
    Ответ написан
  • Как восстановить соединение с MySQL через PDO в PHP-скрипте?

    Remmi
    @Remmi Автор вопроса
    Спасибо @ScorpLeX и @Opaspap за верное направление.

    Решил задачу следующим образом: написал функцию пинга, но не просто отправлял запрос "SELECT 1" к базе, а запрос с простым арифметическим выражением и проверял его результат. Без проверки показывало, что запрос выполняется корректно, а на самом деле это было не так (подозреваю, что надо было включать исключения четвёртым параметром).

    /**
         * Проверка состояния соединения: активно или нет
         * @return bool
         */
        public static function isActiveConnection () {
            if (is_null(self::$dbInstance)) {            
                return false;
            }
    
            try {
                $testRes = self::$dbInstance->query('SELECT 1+2+3');
                $testArray = $testRes->fetch();
                if ($testArray[0] == 6) {
                    return true;
                }
            }
            catch (PDOException $e) {
                return false;
            }
            return false;
        }
    
        /**
         * Возвращает объект базы данных для дальнейшей работы
         * @return mixed
         */
        public static function getDB () {
            if (!self::isActiveConnection()) {
                self::initConnection();    
            }
            return self::$dbInstance;
        }
    Ответ написан
    Комментировать