Ответы пользователя по тегу MySQL
  • Как правильно сделать LIKE запрос?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    в целом мне видется куча возможных проблем, основная, конечно же, в том что вы не получите нормального ответа от сервера, если у вас мешанина из разных кодировок в поле где 1 кодировка. Так же неизвестно какая кодировка установлена для соединения. ЕМНИП пробелы могут быть разные, особенно для utf кодировок, так что на самом простом варианте у вас все посыпется(точнее уже). Имхо проще все отконвертить в утф 1 раз и настроить нормальное сохранение(например вставив iconv в 3-4 места в коде), чем продолжать колоться, но жрать кактус.
    Ответ написан
  • Уникальный номер при генерации счета на оплату, как сделать?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    но дату и номер сделать не понимаю как

    - дата - читать date() и формат хранения даты в
    - номер - если все счета будут со сквозной нумерацией независимо от месяца/года - читайте про автоинкрементные поля MySql. Если нумерация не сквозная, а допустим по месяцам - сначала выборка счета с максимальным номером за текущий месяц, затем инсерт с этим номером+1.
    Ответ написан
    Комментировать
  • Какие преимущества и недостатки разделение одной базы данных на несколько?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Я тут подитожу
    С какими проблемами я могу столкнуться, если решу хранить данные каждого модуля в отдельной базе данных?

    1) JOIN между таблицами будет мягко говоря затруднителен
    2) Мелочи вроде поднятия N соединений вместо одного
    3) В конфигах держать соответственно N настроек
    4) соединение - эта операция нифига не бесплатная, как впрочем и отсоединение
    5) Есть подозрение что с миграциями тоже не все будет гладко и шелковисто
    6) Консистентность без транзакций - отдельная попаболь.

    Выгоды ровно ноль, во всяком случае я не смог придумать ни одного аргумента про.
    Ответ написан
    Комментировать
  • Mysql Дублирующаяся запись по ключу 'PRIMARY', как исправить ошибку?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    ALTER TABLE your_table AUTO_INCREMENT = максимальный_ид;
    Ответ написан
    Комментировать
  • MYSQL: скорость запросов на локальной машине и сервере. В чем отличия?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - explain
    Во вторых - смотрите настройки мускуля, вполне возможно что памяти например на запрос выделено мало и сложные выборки не помещаются в память, или наоборот, на локале выбрка кэшируется на более долгий срок и запрос у вас всегда "горячий".
    Ответ написан
  • Как делаются таблицы для категорий и их подкатегорий?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Читать Nested sets
    Ответ написан
    1 комментарий
  • Почему вставка данных без подтверждения изменяет БД?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Насколько я понимаю - connection.commit() завершает транзакцию, но если вы сделали инсерт, а затем не сделали комит, то транзакция автоматически откатится, однако так как инсерт "уже был", внутренний курсор автоинкремента сместится на количество (не)добавленных строк.

    Почему так происходит и как этого можно избежать?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Например: долгое выполнение определенного MySQL запроса (например - иногда бывает ).

    log_slow_queries   = /path/to/log/mysql-slow.log
    long_query_time         = 1 #время в секундах

    после того как вы увидите что у вас реально что-то тормозит, можно что-то реально поправлять. Например прогнать медленные запросы через explain.

    Относительно частые запросы cron к БД - раз в 4 секунды.
    м? что? Относительно частые запросы - 50 в секунду и выше. Конечно на Васином бложике на хостинге за 3 бакса в год это может считаться частыми запросами, но, судя по таблицам по 8Г, у вас проект немножко серьезнее...

    Например: пользователь вызвал скрипт, который долго выполняет MySQL запрос.
    В то же время cron тоже выполняет MySQL запрос. В то же время происходит что то ещё.
    Космические корабли бороздят просторы Большого театра?
    Если скрипт не блокирующий(не запись массива строк) то эти процессы не будут друг другу мешать. И даже в таком случае все настраивается - смотрите разницу в типах таблиц и приоритеты на запись/чтение.

    Имеет ли смысл создавать несколько баз?

    нет.
    Ответ написан
    Комментировать
  • Как исключить из промежутка дат?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    WHERE (`date_start`  >= '2019-03-01 14:40') 
     AND (`date_end`  <= '2019-03-01 18:45')


    UPD:
    итак, для начала - стандартный формат хранения datetime - Y-m-d H:i:s , то есть у вас СРАЗУ все не правильно будет работать.
    далее, если вы используете запрос в таком виде как у меня описано - все работает.
    Что бы перевести ваши кривые даты в нормальные для запроса либо пишите что-то типа
    $startDate = date('Y-m-d H:i:s',strtotime('01.03.2019 15:40:00');
    , либо вынесите это в хелпер или функцию.
    Ответ написан
  • Проверка поля и оповещение пользователя - как лучше организовать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Табличка из локальной базы, попадаются адреса в разных форматах.
    Форма заполнения этой таблички не должна позволять отклоняться от существующих адресов(более-менее), как минимум населенный пункт/район/улица должны выбираться из готовых списков, а не вводиться в ручную.

    А дальше при обновлении данных в базе и если адрес пользователя попал в список отключенных - шлём ему оповещение.
    Это если у вас пользователь как то имеется в системе с контактами, иначе через Почту России долго будет имхо.

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

    а второе - поиск по адресной базе сомневаюсь что выйдет быстрым.

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    первое что нужно проверять в таком случае - что попало в запрос из переменных, для начала var_dump($sql5) было бы достаточно, и если $id реально не пустой(код где он определяется вы не показали), проверить существует ли idcisco с таким значением.
    Ответ написан
    1 комментарий
  • Как сохранить все выбранные чекбоксы в базу?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Базовые знания - потрачено...
    У вас инпуты с одинаковыми именами, соответственно передаются они один за другим на сервер, где воспринимаются как переменные с соответствующим именем. Логично что последний зачеканый чекбокс тупо затрет предыдущее значение переменной с тем же именем.
    Самое простое решение - добавить "индивидуальности" именам полей.
    так в скрипте будет выводиться как многомерный массив c ключом категорией:
    <input type="checkbox" name="seller[categ][<?php echo $category['category_id']; ?>]" checked="checked" value="<?php echo $category['category_id']; ?>"/>

    так будет выводиться как многомерный массив c автоинкрементным ключом:
    <input type="checkbox" name="seller[categ][]" checked="checked" value="<?php echo $category['category_id']; ?>"/>

    а так как обычный массив:
    <input type="checkbox" name="seller_categ_<?php echo $category['category_id']; ?>" checked="checked" value="<?php echo $category['category_id']; ?>"/>
    Ответ написан
    3 комментария
  • Как правильно добавить условие при запросе mysql?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Данный запрос выводит записи сегодняшней даты,
    фигасе вмутили выборку сегодняшней даты...
    типа так:
    $db->query("
    SELECT COUNT(*) as count
    FROM " . PREFIX . "_games 
    WHERE ( 
         gligue_id != '438' 
          AND date(game_date) = date( now())
    ) 
    or
    (
        date(game_date) = date( now() - INTERVAL 1 DAY) 
         AND game_status = 2
    )
    ");
    Ответ написан
    Комментировать
  • Как сохранить в базе mysql изображения?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    установить кодировку соответствующей таблицы в utf8mb4.
    После инициализации подключения должны быть запросы
    SET character_set_connection = utf8mb4
    SET character_set_client = utf8mb4
    SET character_set_results = utf8mb4
    Ответ написан
    Комментировать
  • Как добавить второй автоинкримент и заполнить поле?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    ALTER TABLE `sometable` 
    ADD COLUMN `id` INT AUTO_INCREMENT PRIMARY KEY,
    AUTO_INCREMENT=100;

    или создать по умолчанию, затем апдейтнуть ид на ид + 99
    Ответ написан
    Комментировать
  • Сохранение в базу из текстового поля в таблице?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Кошмарус максимус...
    ладно все в лапше функциями, так еще и
    1) в одной функции все в кучу - запросы, обработка, вывод...
    2) это вы в каждой функции будете создавать / закрывать соединение где надо из базы 1 запись вытащить?
    3) строка С ЗАПРОСОМ передается ПО ССЫЛКЕ, Карл!(экономим память епта!). Запрос как аргумент функции - вообще новое веяние...
    4) при этом делаем: $query = $string; ... Не, ну а чо...
    Ответ написан
    5 комментариев
  • Оптимизировать запрос MySQL. Как узнать сколько всего рядов когда использую limit?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $GLOBALS это ваще жесть конечно... как и вставка гданных из гет в запрос(даже с какой-то обработкой), у вас же препэйреды по идее должны работать!

    $STH = $GLOBALS["mysqlcon"]->prepare("
    SELECT count(id) as count
    FROM `post` 
    WHERE MATCH (tags) 
    AGAINST ('".clearStr($_GET['search'])."' 
    IN BOOLEAN MODE)");


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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    После подключения должны быть запросы
    SET character_set_connection = utf8mb4
    SET character_set_client = utf8mb4
    SET character_set_results = utf8mb4

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В принципе есть всего 2 варианта, оба варианта выше написали.
    1) уникальный ключ по 2 полям
    2) Селект по этим же полям и проверка на стороне ЯП на наличие записи

    Оба варианта работать будут, однако я бы все же советовал бы использовать 2 вариант. Не смотря на то что вариант 2 имеет некоторую возможность коллизий(как верно заметил Rsa97), он не вызывает неоднозначности в выполнении, то есть он явно проверяет наличие строки, в то время как первый метод вызывает ошибку вставки по уникальному ключу на стороне БД, что гораздо сложнее обрабатывать. В целом ничего не мешает скомбинировать оба метода, тогда коллизий можно избежать, максимально ограничив количиство возможных ошибок предварительной проверкой.
    Ответ написан
  • Как исправить ошибку в запросе?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    похоже проблема в том что предыдущий запрос не отработал до конца в части отдачи результата из запроса в пхп. Попробуйте это почитать, может вы решите свою проблему, там в неосновном ответе есть настройки дополнительные.
    Ответ написан
    Комментировать