Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу MySQL
  • Нужно ли преобразовывать кириллицу в unicode?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в первую очередь не нужно преобразовывать данные в JSON.

    В базе данных нужно сделать таблицу с полями, которые есть в JSON, и при добавлении записи в БД записывать кажде поле в свою ячейку.
    Именно так работают базы данных.
    Ответ написан
    6 комментариев
  • Как вы называете столбцы в таблицах MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Зарезервированные слова можно использовать, заключая их в обратные кавычки, `key`
    2. name - это ключевое слово, а не зарезервированное. А keywords are permitted as identifiers without quoting
    Ответ написан
    Комментировать
  • Стоит ли хранить изображения в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Какой-то странный вопрос.
    То есть в бд место под картинки есть, а просто на диске нету? Это где такая конфигурация бывает?

    По-моему вы с заказчиком путаетесь в понятиях и не понимаете каких-то базовых принципов.

    Такое ощущение, что вы считаете базу данных каким-то волшебным хранилищем, которое сжимает картинки в сто раз.

    И при чем здесь "сжимать вручную"? Чем не устраивает сжимать скриптом?

    PS: Как всегда, остальные ответы в стиле "папа ты с кем сейчас разговаривал"
    Ответ написан
    2 комментария
  • Как организовать php приложение работающее с двумя базами данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос из серии "дурная голова ногам покою не даёт".
    Сначала делаем абсолютно бессмысленное разбиение по серверам, а потом мечемся в поисках решения проблемы, как с двумя серверами работать как будто это один.

    Предлагаю включить логику.
    Ответ написан
    3 комментария
  • Как найти пользователей с таким же login/email?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А теперь правильный ответ

    $stmt = $conn->prepare('SELECT * FROM userst WHERE email=?');
    $stmt->bind_param("s", $_POST['email']);
    $stmt->execute();
    if ($stmt->fetch()) {
          $error = 'Пользователь с таким никнеймом уже существует';
    }
    Ответ написан
  • Как временно скрыть строку из таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если отвечать на вопрос, который вынесен в заголовок, то это возможно только в mysql 8, при блокировке с использованием опции SKIP LOCKED.

    Если же версия другая (и если решать проблему, которая стоит перед автором), то возможны варианты.

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

    Более жизненный вариант (опять же, для решения проблемы, а не вопроса) - это каждый воркер работает со своим блоком данных . например, один выбирает только id, которые кончаются на 1, второй - на 2 - и так далее. можно придумать более-менее равномерный алгоритм, чтобы воркеры не мешали друг другу, на тех же принципах, на которых делается шардирование.

    Ну а самый простой и надёжный - это ставить строке уникальный идентификатор, UUID вполне подойдет.
    Тогда вместо селект+апдейт можно делать сразу апдейт (с условием, которое раньше шло в селект)

    update table set guid = {$UUID} where ... limit 1;
    ... много кода ...
    update table set .... guid = null where guid = {$UUID};
    Ответ написан
    2 комментария
  • Никак не могу понять какую кодировку ставить в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в базе - utf8mb4
    в РНР при соединении с БД - utf8mb4
    на сайте - UTF-8

    Уже внесенные данные это не поправит, но новые будут заноситься корректно.
    Ответ написан
    Комментировать
  • Вставить в таблицу столбец без дублей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Добавить уникальный индекс на имя
    2. Вставлять запросом INSERT IGNORE
    Ответ написан
    Комментировать
  • Как правильно сохранять keywords в базу данных mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Единственное осмысленное решиение

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос - какой-то бред.
    Код в пхп выбирает случайную запись, и потом её удаляет.
    Если при любом обращении к сайту код удаляет случайную строку, то база всегда будет пустой.
    Ответ написан
  • Не могу понять суть реляционных баз данных. Ведь для вывода данных придется делать 2 запроса в разные таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Смысл нормализации очень простой.
    Вот поменял пользователь аватарку.
    В нормальной бд ты поменял имя файла в одной строке одной таблицы, и пошел дальше.
    В своей текущей бд ты должен лазить по всем таблицам, по всем строкам, где этот юзер упомянут, и ВЕЗДЕ менять имя файла

    Достаточно 1 раз занять себя этой увлекательной процедурой, чтобы навсегда забыть про дублирование данных в бд
    Ответ написан
    Комментировать
  • Каков самый быстрый способ вывести данные из нескольких таблиц Mysql в одном списке с сортировкой по определенному полю?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    выкинуть 4 сервера, оставить один
    сделать единую таблицу с полями "Номер", "Название" или "Дата", название и идентификатор в другой таблице
    сделать нужную выборку из этой таблицы
    подгрузить данные из доп таблиц по ид
    Ответ написан
    7 комментариев
  • Как сделать выборку с js массива в mysql, с помощью php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Столбец param не должен иметь данные "такого типа".
    Надо переделывать этот ужас, чтобы столбец param стал таблицей param
    Ответ написан
  • Оптимизация запроса mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Непонятно, почему до сих пор этот вопрос не закрыли, как дубль миллиона других таких же вопросов, ответ на которые заключается в одном слове - EXPLAIN

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все новички поголовно думают, что их запрос применяется ко всей БД разом.
    Ну и размеется хотят найти строки, в которых И адрес, И округ равны какому-то значению.

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

    То есть вместо AND при поиске "по нескольким колонкам" надо использовать OR.

    Разумеется, это не касается прочих условий, использованных в запросе. Они они остаются как есть, а поиск "по нескольким полям" просто берется в скобки.
    Ответ написан
    Комментировать
  • Как добавить +1 к значению null?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    правильный ответ
    pole=ifnull(pole, 0)+1
    Ответ написан
    1 комментарий
  • Как хранить emoji в mysql и показывать через php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Добавлю ответ на вопрос, заданный в заголовке.
    Потому что как всегда, в заголовке одно, а в тексте вопроса совсем другое. Вообще не про mysql, а про личные проблемы автора.

    Чтобы хранить эмодзи в mysql, надо использовать charset=utf8mb4
    Ответ написан
    Комментировать
  • Как сделать конструктор статей для блога?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    может ли человек в таком случае написать внутри статьи <?php ?> и выполнять серверный код,

    Если написанный тобой серверный код не исполняет текст статьи как серверный код, то безопасно.
    Ответ написан
    Комментировать
  • Почему не срабатывает TRUE в SQL запросе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Отвечу на вопрос "почему".
    Потому что приведение типов.
    Строка "FALSE" - это не булево значение FALSE, а строка, 5 букв. Не имеющая никакого отношения к булевым значениям или числам. Присравнении с числом и РНР и mysql пытаются привести строку к числу. При этом из строки "FALSE" получается 0. И поэтому сравнение "работает". Но разумеется так сравнивать нельзя.

    Строка "TRUE" - это, как уже должно быть понятно, не булево значение TRUE, а строка, 4 буквы. Не имеющая никакого отношения к булевым значениям или числам. Присравнении с числом и РНР и mysql пытаются привести строку к числу. При этом из строки "TRUE" получается 0. И поэтому сравнение "не работает". Если передать не строку а булево значение TRUE, то сработает.

    Поскольку в mysql нет типа поля boolean, лучше всего не выпендриваться с TRUE и FALSE, а просто передавать 0 и 1.
    Ответ написан
    Комментировать
  • Возможна ли вставка через PDO ассоциативного массива в БД MySql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Непонятно, какая проблема выполнить запрос в цикле.

    $sql = 'INSERT INTO '. $table. '(`';
    $sql .= implode("`, `", array_keys($newData[0])).'`)';
    $sql .= ' VALUES (:';
    $sql .= implode(", :", array_keys($newData[0])).')';
    foreach ($newData as $row)
        $this->pdo->execute($sql, $row);
    }

    Другое дело что в этом коде инъекция на инъекции и инъекцией погоняет.
    Ответ написан