Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
ssenkevich

Сергей Сенкевич

  • 56
    вклад
  • 0
    вопросов
  • 77
    ответов
  • 52%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как создать сложный запрос MySQL?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    (SELECT id, name, status, created FROM table WHERE status = 2 AND DATE(created) <= CURRENT_DATE ORDER BY created ASC)
    UNION ALL
    (SELECT id, name, status, created FROM table WHERE status = 1 ORDER BY created DESC)
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как написать функцию?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    function create_word(string $str, int $cnt): string
    {
        $len = \strlen($str);
        if ($len === 0 || $cnt === 0) {
            return '';
        }
    
        $result = '';
        while ($cnt > $len) {
            $i = ($cnt % ($len)) ?: $len;
            $result = $str[$i - 1] . $result;
            $cnt = ($cnt - $i) / $len;
        }
        $result = $str[$cnt - 1] . $result;
        
        return $result;
    }
    
    echo create_word('abc', 9);  //'bc'
    echo create_word('abc', 18); //'abc'
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как исключить из промежутка дат?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    SELECT * 
    FROM `car` 
    WHERE `status` = '1' AND
        NOT EXISTS (
            SELECT 1 
            FROM `event` 
            WHERE `id_car` = `car`.`id` AND (
                '01.03.2019 15:40:00' BETWEEN `date_start` AND `date_end` OR
                '01.03.2019 18:30:00' BETWEEN `date_start` AND `date_end` OR
                ('01.03.2019 15:40:00' < `date_start` AND '01.03.2019 18:30:00' > `date_end`)
            )
        )
    Ответ написан более трёх лет назад
    9 комментариев
    9 комментариев
  • Можно ли в MySQL развернуть колонку в строку?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    SELECT
        Object,
        MAX(CASE WHEN Field = 'foo' THEN Value ELSE NULL END) AS foo,
        MAX(CASE WHEN Field = 'bar' THEN Value ELSE NULL END) AS bar,
        MAX(CASE WHEN Field = 'baz' THEN Value ELSE NULL END) AS baz
    FROM table
    GROUP BY Object
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как получить позицию пользователя относительно запроса SQL?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Если надо вывести первые N записей рейтинга, то запрос такой (для N = 10):
    SELECT @n:=@n+1 AS nn, u.*
    FROM users u JOIN (SELECT @n:=0)
    ORDER BY u.rating DESC
    LIMIT 10

    Если просто надо вывести данные пользователя, находящегося на N-ом месте в рейтинге, то запрос такой (для N = 5):
    SELECT * FROM users ORDER BY rating DESC LIMIT 5, 1
    Ответ написан более трёх лет назад
    8 комментариев
    8 комментариев
  • MySQL запрос с условием MAX()?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    SELECT * FROM table t WHERE active = 1 AND NOT EXISTS (
        SELECT 1 FROM table WHERE active = 1 AND num > t.num
    )
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Как оптимизировать потребление оперативной памяти?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Если это разовая операция, то лучше не использовать Doctrine, а сделать все прямым запросом в базу данных. В крайнем случае, можно воспользоваться DBAL, но опять же обычным SQL-запросом.
    Если же необходимо все сделать именно средствами Doctrine, то:
    1. Оба репозитория записать в переменные и вынести их перед циклом
    2. Проверить отношения между сущностями, учавствующими в этой операции. Скорее всего, вы не помечаете коллекции как LAZY или EXTRA_LAZY и из-за этого Doctrine тащит кучу ненужных сущностей, забивая память
    3. Если п.2 не помог, то уменьшить кол-во итераций между очистками до 50 - 100
    4. Если п.3 не помог, то увеличить кол-во памяти через ini_set('memory_limit', '512M');
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как в форме для поля типа entity изменить тип на hidden?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    $builder->add('image', 'hidden');
    Ответ написан более трёх лет назад
    12 комментариев
    12 комментариев
  • Symfony2 + авторизация по id?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    ## Security Configuration
    security:
        providers:
            main:
                entity: { class: BlogBundle:User, property: id_vk }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Какая оптимальная замена WHERE IN?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Не так давно столкнулся с подобной задачей и пришел к такому же решению - создание временной таблицы, загрузка в нее данных через LOAD DATA INFILE, выполнение нужного запроса. Кстати, так же делаю, когда необходимо обновить большое кол-во строк (1К+) в какой-то таблице данными извне.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как для бандла mustache настроить конфигурацию?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Судя по описанию, как то так:
    mustache:
        globals:
            foo: 'bar'
            ...
        template_class_prefix: '__Mustache_'
        template_base_class: 'Mustache_Template'
        cache: '%kernel.cache_dir%/mustache'
        loader_id: 'mustache.loader'
        partials_loader_id: 'mustache.loader'
        charset: '%kernel.charset%'
    Ответ написан более трёх лет назад
    6 комментариев
    6 комментариев
  • Как в Symfony2 валидировать ArrayCollection свойства?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Если вы хотите валидировать связанные сущности, то правила валидации надо прописывать в их классах. А если нужно проверить именно саму коллекцию (кол-во элементов и т.п.), то посмотрите примеры из документации. Если правила сложнее, то можно через callback или expressions .
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Не подскажете нормальную документацию по подключению doctrine 2 orm к php проекту?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    А чем официальная не устраивает?
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как сделать запрос, чтобы было по одному последнему результату за каждый день?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    SELECT * FROM table t WHERE NOT EXISTS (
        SELECT 1 FROM table WHERE sell = t.sell AND DATE(created) = DATE(t.created) AND created > t.created
    )
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как работать с геолокацией?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Создаете у себя в базе данных таблицу связей регионов выбранного сервиса GeoIP с вашей таблицей стран и регионов (ID региона в базе данных сервиса GeoIP, ID региона в вашей базе данных, is_valid - проверена ли связь или нет). Заполнить эту таблицу нужно всего один раз. Ну и, при каждом обновлении GeoIP надо проверять - не появились ли новые регионы. Связывать можно автоматически (через LIKE), по при этом, в поле is_valid проставлять false. Потом вручную проверять и ставить is_valid = true.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как ускорить выполнение GROUP BY?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Не могли бы вы словами объяснить, что должен сделать запрос? Тот запрос, что вы написали, не имеет смысла.
    Если нужно получить количество уникальных сочетаний (id1, id2, id3, p2), то попробуйте такой запрос:
    SELECT `id1`, `id2`, `id3`, COUNT(*) AS `count`, `p2` 
    FROM `table` 
    GROUP BY `id1`, `id2`, `id3`, `p2`
    ORDER BY NULL

    Если p2 объявлен как NOT NULL, то должно работать достаточно быстро.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как правильно использовать doctrine DBAL?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Скорее всего, вы забыли $conn->
    $stmt = $conn->executeQuery(
        "SELECT * FROM users WHERE name = :name OR username = :name",
        [":name" => $name]
    );
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как с помощью php изменить задание cron?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    //получаем список работ для пользователя user
    $currentJobs = shell_exec("crontab -u user -l");
    //вносим нужные изменения в расписание работ
    ...
    //сохраняем все во временном файле
    $filename = tempnam(sys_get_temp_dir(), 'crontab');
    file_put_contents($filename, $currentJobs);
    //обновляем cron
    exec("crontab -u user " . $filename);


    Только надо учитывать, что у пользователя, от которого запускается этот PHP-скрипт, должны быть права на редактирование cron пользователя user.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Почему не работает GROUP BY?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Чтобы избавиться от дублей, есть DISTINCT. А если хотите именно через GROUP BY, то вам там нужно указать все три поля, присутствующие в SELECT, а не только rnn.
    Ответ написан более трёх лет назад
    6 комментариев
    6 комментариев
  • Передать параметр из PHP в веб-сервис 1С?

    ssenkevich
    Сергей Сенкевич @ssenkevich
    Вы передаете даты как объект DateTime, а метод, скорее всего, ожидает их увидеть в виде строки. Попробуйте такой вариант:
    $SoapClient1C = new SoapClient("http://test.1c/WEB/ws/webservice?wsdl");
    $List = $SoapClient1C->getDDSFact(array("BDate" => '2000-01-01', "EDate" => '2014-12-12'));


    Если не сработает, то посмотрите в документации в каком формате этот метод принимает даты.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • Следующие →
Самые активные сегодня
  • NikFaraday
    Nik Faraday
    • 6 ответов
    • 1 вопрос
  • AUser0
    • 7 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 6 ответов
    • 0 вопросов
  • oshliaer
    Alexander Ivanov
    • 6 ответов
    • 0 вопросов
  • sashabeep
    sashabeep
    • 5 ответов
    • 0 вопросов
  • Drno
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации