• SQL запрос к БД через WordPress в 46 раз дольше чем через phpmyadmin?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых нужно нормально писать запрос, хотя бы для понимания что вы делаете:
    SELECT DISTINCT tt.term_id 
    FROM wp_term_relationships AS tr 
    JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id 
    JOIN wp_terms AS t 
    ON tt.term_id = t.term_id 
    WHERE tr.object_id IN (
       SELECT p.ID 
       FROM wp_posts AS p 
       JOIN wp_term_relationships AS tr 
       ON p.ID = tr.object_id 
       JOIN wp_term_taxonomy AS tt 
       ON tr.term_taxonomy_id = tt.term_taxonomy_id 
       JOIN wp_terms AS t 
       ON tt.term_id = t.term_id 
       WHERE p.post_type = 'product' 
       AND p.post_status = 'publish' 
       AND tt.taxonomy = 'product_cat' 
       AND t.term_id = '2961' 
    ) 
    AND tt.taxonomy LIKE 'pa_%';

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

    Ну и в третьих, запросы без лимита почти всегда будут медленными, так как бд вынуждена перебирать все таблицы перебором. Если же такой запрос необходим по каким то причинам, то стоит посмотреть что же происходит с запросом. Нужно в первую очередь сделать отдельно вложенный запрос, проверить как он работает, оптимизировать, а затем то же самое сделать с внешним. Так же неплохо прогнать эти запросы через explain, посмотреть каких индексов не хватает. Ну и первое на что стоит обратить внимание это tt.taxonomy LIKE 'pa_%', что само по себе затратно, и требует обязательного индекса.
    Ответ написан
    Комментировать
  • Как сделать уведомления в телеграмм при входе на сайт?

    @zkrvndm
    Софт для автоматизации
    У вас подход изначально неправильный.

    1. Ни в коем случае нельзя ключи от API в открытом виде размещать на своем сайте

    2. За отправку уведомлений должен отвечать тот же скрипт, который отдает html-страницу

    3. В случае с php просто делаете запрос на API телеги используя CURL, примеров в сети полно

    https://vk-book.ru/otpravka-soobshhenij-v-telegram...
    Ответ написан
    Комментировать
  • Как пофиксить ошибку Incorrect TIMESTAMP value?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если значение поля с типом TIMESTAMP некорректно (а пустая строка - это некорректное значение) - надо заменить его на корректное.
    • Если поле NULLable - то например на NULL.
    • Если настройки допускают нулевую дату - то на `0000-00-00 00:00:00`.
    • Иначе - на некое предопределённое значение. В зависимости от смысла поля - либо в далёком прошлом, либо в столь же далёком будущем.
    Ответ написан
    Комментировать
  • Как найти работу со сложными и комплексными проектами если нету опыта работы в таких проектах?

    Viji
    @Viji
    Associate DevOps Engineer
    На самом деле отсутсвие комплексных и сложных проектов, это конечно проблема, но до определенной степени их можно делать самому, смотреть видаки по архитектуре и system design, купить курс на яндексе (там более менее ничего), купить курс по system design, зайти в сложный опенсоурс проект, прокачать английский до уровня IELTS 7, чтобы на собеседовании при отсутствии опыта можно бьло хоть английским взять - в некоторых компаниях по крайней мере. Сдать экзамен CKAD или CKA.

    А по ИБ - сдай экзамены Certified Ethical Hacker CEH и CISSP (не смотрел правда можно ли еще в России) и работу найдешь !

    p.s. ник еще сменить надо )

    в общем можно сделать много.

    Тысячам людей много чего хочется и только единицы чего-то хотят !
    Ответ написан
    Комментировать
  • Какой уровень блокировки строк по умолчанию в запросе SELECT?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ни один из перечисленных.
    Для простого SELECT нужны AccessShareLock на таблицу/индексы/etc. row-level блокировки не применяются за ненадобностью.
    Ответ написан
    Комментировать
  • Чем отличается php код запускаемый cron от обычного php кода?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Ничем. Это, внезапно, тоже "обычный php код".
    А вот среда запуска отличается - например, в CLI режиме применяется отдельный php.ini.
    Ответ написан
    7 комментариев
  • Сколько должна весить папка сайта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    должна

    Должна кому?
    Вес в 7мб это приемлемый вес или слишком много?

    Желательно, чтобы сайт загружал контент видимой области до 2-3 секунд (lighthouse: mobile, 3-4g), остальное грузим следом.
    В моем случае это сайт фотографа с множество png картинок

    Перегнать в webp, ограничить стартовой загрузкой в 10 изображений и далее подгружать по мере скролла портфолио.
    Ответ написан
    Комментировать
  • Как сформировать запрос SQL в случае отсутствия значения в таблице базы данных?

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

    И возможно ваши страдания решаются запросом типа insert ... on duplicate key update ...
    https://dev.mysql.com/doc/refman/8.0/en/insert-on-...
    Ответ написан
    Комментировать
  • Файл конфига php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Очень хороший вопрос, только вы путаете файл с настройками и файл первоначальной настройки приложения.
    Вам нужны оба.
    1. файл c настройками
    Их должно быть два.
    Первый файл называется config.sample.php, он содержит только один массив, который заполняется пустыми/дефолтными значениями и может содержать не только настройки БД но и содержать другие секции:
    <?php
    return [
      'db' => [
        'hostname' => '',
        'username' => '',
        'password' => '',
        'database' => '',
      ],
    ];

    Этот файл добавляется в репозиторий.

    Второй файл называется config.php и он создается руками каждый раз при установке CMS на новом сервере. В него пишутся актуальные настройки для каждого сервера.
    Этот файл не добавляется в репозиторий (а добавляется, соответственно, в .gitignore).

    2. Файл первоначальной настройки приложения.
    В него идут команды, которые пишутся на любой странице: подключение к БД, старт сессии, всякие инклюды и прочее. Кроме того, в этом файле должен быть код
    if (!file_exists('config.php'))
     {
         $msg = 'Создайте файл config.php на основе config.sample.php и внесите в него настройки';
         throw new RuntimeException($msg);
     }


    Таким образом система будет помогать программисту, если он забыл создать config.php с актуальными для конкретного сервера настройками.

    И вот этот файл, назовем его init.php, уже и подключаем во все остальные файлы.

    Кстати, начиная с 8 версии РНР можно писать просто
    $conn = mysqli_connect(...$config['db']);
    В этом случае ключи массива $config['db'] будут использоваться в качестве имен параметров функции - очень удобно
    Ответ написан
    Комментировать
  • Можете посоветовать книги или курсы по python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно нахожусь между начинающим и средним

    Вот темы которые я знаю на достаточном уровне:
    - Основы python (циклы, условные операторы, переменные, функции, строки, списки)
    - Вложенные списки (матрицы)
    - Кортежи
    - Множества
    - Словари
    - Некоторые модули

    Это даже не джун, о каком среднем Вы говорите?

    Можете посоветовать книги или курсы по python?

    1. Гуглите "учебник python" и решаете все от А до Я.
    2. Гуглите следующий учебник, который восполнит пробелы п1.
    3. Ищите себе пет-проект и пытаетесь его реализовать (повторить несколько раз). Т.к. Python сильно разносторонне-развитый язык, то и проекты должны быть в портфолио такие, которые от Вас может ожидать работодатель/заказчик.
    4. Ищите людей, которые сделают ревью п.3.
    5. Заливаете достойные проекты на гит.
    6. Идете на собесы, попутно устраняя пробелы в знаниях и пет-проектах, которые услышите на собесах.
    Ответ написан
  • Как сформировать AJAX запрос для базы данных?

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

    Сначала надо добавить одну запись в БД руками.
    Потом так же в БД учиться писать запрос SELECT
    потом учиться выполнять SQL запросы в РНР.
    потом учиться получать результат SQL запроса в массив.
    потом учиться выводить многомерный массив
    потом учиться выводить многомерный массив в виде требуемого HTML, чтобы получить свою таблицу
    после этого можно сесть и отдохнуть.

    И после хорошего отдыха начать учиться работать с формами в HTML
    и как их обрабатывать в РНР
    написав в итоге код для добавления данных формы в БД

    и только после этого, если силы останутся, навешивать рюшечки в виде запроса и обновления аяксом
    Ответ написан
    41 комментарий
  • Как лучше организовать структуру сайта по продаже плитки?

    Sanes
    @Sanes
    Коллекция это характеристика товара. По ней можно сделать фильтр. Или как дополнительная категория.
    Ответ написан
    Комментировать
  • Как сделать вывод из бд в столбик?

    vabka
    @vabka
    Токсичный шарпист
    Потому что html игнорирует переносы строк в определённых ситуациях. (если интересно - читай спецификацию)
    Так что тебе нужно переносы строк заменить на <br>
    Для этого даже есть готовая функция в php (раз ты используешь php) nl2br(...)
    Либо ты можешь сделать аналогичное через css:
    https://stackoverflow.com/questions/2703601/how-to...

    PS: "enter" - это не символ. Это кнопка на клавиатуре. Очень хорошо было бы, если бы ты посмотрел, какой именно символ (или последовательность символов) там образовалась
    Ответ написан
    Комментировать
  • Как разложить URL path на части?

    Stalker_RED
    @Stalker_RED
    $str = 'aaa/bbb/ccc/ddd';
    $separator = '/';
    $parts = explode($separator, $str); // <-- магия здесь
    var_export($parts);

    https://www.php.net/manual/en/function.explode.php
    Ответ написан
    1 комментарий
  • Какой самый быстрый способ передачи информации между двумя ПК?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вытащить винт из виндового компа и ставить в линуксовый, примонтировать и скопировать с максимально возможной скоростью.
    Ответ написан
    Комментировать
  • Ошибка 500 php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если это локальный сервер то добавить строчку
    php_ini("display_errors", "on");
    Если боевой, то смотреть ошибку в логах
    Ответ написан
    Комментировать
  • Как настроить версию php в зависимости от урла?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Очень странная задача.
    Но решить можно, проще всего через Docker: один контейнер с одной версией php (например, php:7.4-fpm), второй — со второй (php:8.2-fpm), указав одну и ту же директорию с файлами. Nginx — в третий контейнер и в конфигурации для него пишем два блока location { ... }: в одном fastcgi_pass php74:9200;, во втором — fastcgi_pass php82:9200;.
    Ответ написан
    Комментировать
  • Куда положить dump.sql для автоподнятия БД с нужного дампа Docker?

    @Senture Автор вопроса
    Разобрался.

    Вот мой код:
    version: "2.15.1"
    
    services:
      postgres:
        image: postgres:13.3
        environment:
          POSTGRES_DB: "username"
          POSTGRES_USER: "username"
          POSTGRES_PASSWORD: "username"
          PGDATA: "/var/lib/postgresql/data/pgdata"
        volumes:
          - ./Initer:/docker-entrypoint-initdb.d
          - usr-data:/var/lib/postgresql/data
        ports:
          - "5437:5432"
    
    volumes:
      usr-data:


    В этом случае, нужно создать директорию Initer в корне (где лежит docker-compose.yml) и в нее положить необходимый dump.sql и все работает.

    Важно!: Если папку не создать, она появится автоматически после docker-compose up. Но будет естественно пустой, и даже если сделать down, в папку положить дамп, и поднять приложение (docker-compose up) бэкап уже не накатится, т.к. БД уже была проинициализирована ранее и никакие изменения к ней применяться не будут.

    Прошу прощения за такие глупые вопросы :D
    Ответ написан
    6 комментариев
  • Как сделать автозаполнение поля mysql?

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

    Всё что тут понаписано - это какие-то завиральные идеи от неграмотности.
    И их надо просто выкинуть из головы.
    поле product_id не имеет смысла, его надо убрать из таблицы
    в name ничего подставлять не надо.
    Ответ написан
    8 комментариев
  • Где ошибка в строке запроса к PosgreSQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В запросе, использующем более одной таблицы, все имена полей должны указываться как минимум с алиасом таблицы.

    Ну и, спрашивая про запрос, следует показывать не код на питоне, а именно текст запроса.
    Ответ написан
    Комментировать