Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (15)

Лучшие ответы пользователя

Все ответы (22)
  • PHP7 и foreach. Коварное изменение?

    @nelson
    Читайте официальную документацию по переезду, там всё написано.
    php.net/manual/en/migration70.incompatible.php

    А именно, по вашему вопросу про foreach:
    foreach by-value operates on a copy of the array
    When used in the default by-value mode, foreach will now operate on a copy of the array being iterated rather than the array itself. This means that changes to the array made during iteration will not affect the values that are iterated.

    Перевод: в режиме foreach($arr as $v) - движок сначала сделает копию массива и будет проводить итерацию по копии. Даже если во время цикла вы сделаете $arr = [], то цикл всё равно пробежит до конца исходного массива, по всем элементам.

    То есть код теперь эквивалентен такому:
    $arr_copy = $arr;
    foreach($arr_copy as $k=>$v) {
    ...
    }
    за тем исключением, что к переменной $arr_copy вы не имеете прямого доступа.

    Это не значит, что переменная $arr внутри цикла начинает ссылаться на копию. Поэтому Ваш код будет работать.
    Вот если бы вы работали в цикле не только с текущим элементом, а например, и со следующими относительно текущего, изменяя или удаляя их, тогда поведение программы изменилось бы. Но я никогда не встречал подобного использования цикла foreach.
    Ответ написан
    2 комментария
  • Подсчитать количество строк при разных условиях в одном запросе?

    @nelson
    SELECT 
    SUM( IF(post_id != 1, 1, 0) ) as one_count,  
    SUM( IF(post_id = 1, 1, 0) ) as two_count
    FROM comments 
    WHERE user_id = $user_id
    Ответ написан
    2 комментария
  • Автоматическое занесение информации с сайта в базу данных другого

    @nelson
    Зависит от того — они на одном сервере (или рядом) или нет.
    Если не на одном:
    Сделать на втором магазине страницу-«приёмник», и при изменении данных на первом — отправлять POST-запрос с новыми данными (если ваши сервера это позволяют, конечно). Страница приёмник должна проверять откуда пришел запрос (какой то секретный ключ, проверка ip адреса), его целостность — и затем обновлять у себя данные.
    Если на одном:
    использовать общую базу данных или файл по заданному общему пути.

    Да вообще решений много, вы бы уточнили условия.
    Ответ написан
    Комментировать
  • Производительность индексов в mysql?

    @nelson
    Зависит от распределения значений и запросов.
    Например, если у вас 0 и 1 равномерно распределены по строкам, и в запросе вы также ищете как 0 так и 1 - то индекс особо не нужен.
    Если же у вас 80% нули, и 20% единицы, а в запросах вы проверяете только на =1, то индекс может повысить производительность такого запроса.

    Я бы ориентировался на цифру в 20% - если в столбце есть значения которые встречаются реже чем в 20% строк, и по этим значениям осуществляется поиск, то индекс может его ускорить.

    На вашем месте я бы начал с того, что добавил этот индекс и посмотрел план запроса командой EXPLAIN - если индекс лишний, то оптимизатор mysql его не будет использовать (смотрите столбец key в результате explain).

    Кстати, при выполнении запроса оптимизатор mysql как правило выбирает только один индекс. Смотрит среди всех столбцов, который есть в условии where или order by и выбирает самый селективный (это если упрощенно, без деталей).
    Ответ написан
    3 комментария