Задать вопрос
  • Как упростить данный скрипт, слишком долго выполняется?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сделать первичный индекс на вторую таблицу.
    Ответ написан
    Комментировать
  • Хранение значений массива в БД?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это задание, а не вопрос.
    Ответ написан
    5 комментариев
  • Нормально ли что джуна бэкэндера просят проектировать бд?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если ты только в самом начале пути, и единственный вопрос, который тебя при этом заботит - это "а не слишком ли много от меня хотят?", то далеко по этому пути не уйдешь. В этой профессии любой опыт ценен. И возможность получить дополнительные знания - это плюс вакансии, а не минус.
    Суть профессии программиста в том, что ты учишься все время. То есть, любые полученные знания - это не вершина, а всего лишь еще одна ступенька. И просто глупо ставить какие-то рамки - "это будем учить, а это уже они много хочут".

    При чем здесь самоуверенность - вообще непонятно
    Разумеется весь код джуна будет проходить код-ревью, то есть прямо в продакшен никто эту БД заливать не будет.
    Но при этом и создавать за него простенькую БД для небольшого сервиса, типа отзывов на товары, никто не будет: такой беспомощный джун никому не нужен. Предполагается, что еще на этапе обучения он уже делал подобные проекты и умеет спроектировать для них БД.
    Ответ написан
    Комментировать
  • Laravel есть ли хорошая книга?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хорошая книга, особенно после Симфони - https://github.com/adelf/acwa_book_ru
    Последних ништяков в ней нет, но зато показано как побороть те кривые дорожки, которыми ходит Лара чтобы вызывать вау-эффект за счет граблей в будущем.
    Ответ написан
  • Как правильно составить запрос к БД?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Стандартный способ:
    SELECT count(*) FROM shop LEFT JOIN shopData ON shopData.shop_id=shop.id WHERE shopData.shop_id IS NULL

    Но следующий способ должен быть быстрее
    SELECT count(*) FROM shop WHERE NOT EXISTS (SELECT 1 FROM shopData WHERE shop_id=shop.id)
    Ответ написан
    2 комментария
  • Как можно ускорить работу Exception?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "Если вас беспокоит скорость работы исключений, вы что-то делаете неправильно"

    Ускорить нельзя.
    В данном случае все проблемы не из-за исключений, а из-за говнокода.

    Ошибка валидации при валидации - это не исключительная ситуация, а совершенно нормальная. Часть бизнес-логики. То есть в процессе валидации всего массива данных исключения кидаться не должны.
    Если исключения используются для управления ходом выполнения программы - это УЖЕ ошибка.

    По результатам валидации исключение может кидаться ОДНО. В самом конце. По результатам валидации всего набора данных. Или не кидаться - зависит от конкретной бизнес-логики. Но если и кидать, то только одно, по результатам.
    Это будет правильное использование исключений, которое вообще никак не скажется на скорости работы кода.
    Ответ написан
  • Как вывести значение из массива в ячейку таблицы циклом foreach?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы вывести один элемент массива, никакой цикл не нужен.
    Надо просто обратиться к массиву по индексу
    Ответ написан
  • Почему Monolog не может записать файл?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В сообщениях об ошибке всё написано.
    Монолог ругался, что у него не хватает прав на запись. И правильно ругался, потому что писать логи приложения в /var/log - это очень так себе идея.

    А сама эта аминязданпапанах ничего не ругается, потому что её автор - дебил.
    Вот за такое
    if (false === @file_put_contents($path, $content)) {

    хочется очень долго бить по пальцам чем-нибудь тяжелым.
    чтобы никогда больше в голове даже мысль не возникала писать такой высокоинтеллектуальный код.
    который, как раз и занимается тем, что скрывает реальную причину ошибки
    Которая, скорее всего, опять "нет прав". Только уже не для логов, а для собственно создаваемого файла.
    Ответ написан
    1 комментарий
  • Как сделать запрос через тройную связь, при это получая все связанные значения 3 таблицы в массив к 1 записи?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    GROUP_CONCAT()
    Но это редко бывает полезно поскольку обычно нужны не только названия ролей, но и их идентификаторы
    Если хочется "одной строчкой", то надо осваивать продвинутые ORM типа Doctrine
    Ответ написан
    Комментировать
  • Как использовать ReactJS + PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Правильно.
    Только чтобы общаться с РНР по API, надо сначала написать на РНР этот API
    Ответ написан
    Комментировать
  • Как на стороне сервера закрыть соединение с кодом 200?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сначала http_response_code, а потом echo.
    Азы протокола НТТР. Заголовки идут перед телом ответа.

    Впрочем, это может быть и любая другая ошибка. К примеру, никакого класса EventHttpRequest нет и в помине.
    Чтобы не получать "совсем другой ответ", ошибки надо логировать, читать и исправлять.

    Стандартная функция, которая закрывает соединение - fastcgi_finish_request()
    Ответ написан
    7 комментариев
  • Как лучше реализовать корзину для магазина?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    На все эти вопросы легко ответить самостоятельно, если просто немного подумать.
    Никакое знание РНР тут не требуется - только здравый смысл и минимальное понимание принципа работы веб-сайта.

    Обычно для анрегов корзина делается в сессии, а для регов - в базе.
    При логине и наличии корзины в сессии, содержимое мержится с корзиной в базе. То есть такого вопроса "как сделать идентификацию" в принципе не возникает - все делается само собой. Когда юзер авторизовался, у нас есть и его ид, и сессиия. Что тут может быть не ясно?
    Ответ написан
    Комментировать
  • "Умение профилировать и отлаживать свой код без использования функции dd/var_dump" - это как?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это называется словом "трассировка".
    Пошаговое выполнение программы средствами IDE, с контролем значений всех переменных.
    На определенной строке программы ставится специальная метка, брекпойнт.
    Дойдя до неё, интерпретация кода остановится, и дальше можно будет выполнять каждую строчку по одной, видя при этом значения всех переменных. Причем именно всех, а не только тех, которые ты добавил в дд.
    То есть трассировка средствами IDE удобнее, быстрее и даёт больше информации, чем ручное колупание с вардамп.

    В РНР этим занимается xdebug в связке с IDE

    Также там упоминается профилирование, которое тоже осуществляет xdebug. Это измерение времени работы различных участков кода, с целью выявить самые медленные, бутылочные горлышки. Это опять же можно делать вручную, замеряя тайминги и выводя их результаты, но xdebug делает это всё автоматически, без того чтобы добавлять что-либо в код. И, опять же, дает полную картину, а не только те участки, которые ты замерил вручную.
    Ответ написан
    2 комментария
  • Как правильно организовать получение списка данных с дополнительным полем - количество?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Без дополнительного запроса нельзя.
    Есть разные ухищрения, которые позволят замаскировать дополнительный запрос, но по факту это будет именно он.
    Но при этом есть риск натупить с производительностью.
    Так что лучше не пытаться усидеть на двух стульях одной, ээээ..., туловищем, а сделать два отдельных запроса.
    Да, это неудобно. Но неправильный подсчет полного количества строк на большой таблице может создать очень сильную нагрузку, вплоть до того, чтобы полностью положить систему. Так что лучше не экспериментировать
    Ответ написан
    Комментировать
  • Как сравнить две строки из одной и той-же таблице без дополнительного join или from?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос, как всегда, дурацкий.
    Звучит как "а можно есть суп без ложки?". И дальше в оправдание нелепые страхи.

    Надо не бояться "джойнить огромную таблицу" а учиться оптимизировать запросы.
    В данном случае никакой проблемы с джойном нет .
    Если будет тормозить, поставить нужный индекс, как минимум по statusId
    Ответ написан
    Комментировать
  • Как перебрать все значения строки разделенные запятой в mysql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В бд не должно быть строк, которые содержат значения, разделенные запятой. Для этого в бд есть таблицы и строки.

    И тогда вопроса как прочитать значение никогда не возникнет
    Ответ написан
    4 комментария
  • Сколько времени должен занимать такой запрос MySQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я не очень понимаю во всех этих AWS, но расход памяти в три гига - это какая-то чушь.

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

    Вообще цифры странные. Полное ощущение что индекс не влезает в память и идёт постоянная работа с диском. Но тогда должен процессор зашкаливать. А он на 5 процентах. Вот не понимаю я эти ваши авс.
    Ответ написан
  • Что такое MVC и как его использовать?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    На мелких одноразовых задачах вида "сделать форму, которая бы сохраняла что-то в таблицу и забыть про нее" понять преимущества MVC невозможно.

    MVC - это не про сделать, а про поддерживать и развивать.

    Представим, что вместо обычной формы мы решим сделать ajax. Если у нас будет обычный винегрет из SQL, PHP и html, то придется переписывать его весь.
    Если же у нас нормальная структура, то просто заменим во View вызов шаблонизатора на json кодирование. то есть поменяем одну строчку кода.

    Допустим, в дополнение к форме нам нужно будет сделать консольную команду, которая берет данные из файла.

    Если используется обычный говнокод-подход, то придется все писать заново.
    При использовании MVC, надо будет в этой утилите написать только чтение из файла, а дальше просто вызвать метод модели, который у нас уже есть.
    Ответ написан
    Комментировать
  • Как разделить данные при join-е ( pdo:mysql )?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Без вариантов.

    При ближайшем рассмотрении создание объектов прямо из пдо оказывается довольно бесполезной фичей.

    По данному вопросу либо цикл, как например здесь, либо просто два запроса, второй по списку id из первого
    Ответ написан
    Комментировать
  • Почему в базу записываются иероглифы?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хрестоматийный пример того, как не надо задавать вопросы.

    "Я там что-то сделал, получилось каля-маля. Колеса в разный цвет красил. Не помогает".

    Буквальный ответ на вопрос из заголовка: потому что кодировка данных не совпадает с той, которую ждёт база.
    Ответ написан
    Комментировать