Ответы пользователя по тегу MySQL
  • Почему join еще одной таблицы изменяет мой count?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JOIN - это декартово произведение таблиц. При отсутствии фильтра ON число строк результата JOIN'а будет равняться произведению числа строк таблиц, входящих в JOIN.
    В вашем случае, если в users_groups_link есть несколько строк с одним group_id, то в результате JOIN'а для каждой из них будет создана отдельная строка результата.
    Побороть можно, например, используя count(DISTINCT sl.salon_id).
    Ответ написан
    1 комментарий
  • Почему запрос странно работает с 3 выражениями?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И что тут странного? Прочитайте своё условие по-русски и найдите в своей таблице соответствующую строку.
    Ваше условие
    (itemId больше 1) И (minId больше либо равен 5) И (maxId больше либо равен 5)
    Ответ написан
    4 комментария
  • MySQL cортировка по определенному порядку id, как это сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ORDER BY FIND_IN_SET(`id`, '$product_ids')
    Но для большого списка сортировка будет медленная, поскольку индекс неприменим.
    Ответ написан
    1 комментарий
  • Как законектить драйвер PDO mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    mysql !== mysgl
    Ответ написан
    Комментировать
  • Как правильней хранить и обновлять JWT для аутентификации?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Каждый JWT-токен это три блока - заголовок, полезная нагрузка и подпись. В заголовке хранится информация о самом токене (срок жизни, алгоритм подписи). Полезная нагрузка - информация приложения. Подпись - зашифрованный хэш первых двух частей. В распределённых системах выдавать токен может сервер авторизации, а использовать любой другой сервер. В таком случае подпись может быть асимметричной, закрытый ключ для подписания, открытый для проверки.

    Токены выдаются парой, рабочий + обновления.

    Рабочий токен выдаётся на короткое время (минуты - десятки минут). Внутри содержится срок окончания действия токена, идентификатор пользователя, его права, какая-то информация для минимизации обращений к БД по данному пользователю. Токен на сервере не сохраняется.

    Токен обновления выдаётся на длительное время (часы - дни). Внутри содержится срок окончания действия токена и идентификатор пользователя для автоматической аутентификации. Токен обновления (или его идентификатор, если он есть в токене) хранится в БД вместе с идентификатором пользователя.

    1. Клиент аутентифицируется/авторизуется на сервере со своим логином/паролем.
    2. Сервер генерирует пару токенов, короткоживущий рабочий и долгоживущий для обновления. Токен обновления записывается в БД.
    3. Клиент присылает запрос с рабочим токеном.
    4. Сервер проверяет токен.
    4а. Токен действительный и неистекший, сервер отвечает на запрос.
    4б. Токен действительный, но истекший, сервер сообщает о необходимости обновления токена.
    4в. Токен недействительный, сервер сообщает о необходимости входа по логину/паролю (на п.1).
    5. Клиент присылает токен обновления.
    6. Сервер проверяет токен, в том числе и в БД.
    6а. Токен обновления недействительный, сервер сообщает о необходимости входа по логину/паролю (на п.1).
    6б. Токен обновления действительный, но в БД отсутствует, сервер удаляет все токены обновления этого пользователя из БД и сообщает о необходимости входа по логину/паролю (на п.1).
    6в. Токен обновления действительный, но просроченный, сервер удаляет этот токен из БД и сообщает о необходимости входа по логину/паролю (на п.1).
    6г. Токен обновления действительный, непросроченный, в БД присутствует. Сервер удаляет этот токен из БД, генерирует новую пару, записывает новый токен обновления в БД и отправляет токены клиенту (на п.3).
    Ответ написан
    Комментировать
  • Что делает данная строка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ЕСЛИ (sl.statusLogNow + statusDay < NOW()) {
      ECЛИ (m.date_edit + statusDay < NOW()) {
        ЕСЛИ (m.statusID = 6 И (flag_sklad_our = 1 ИЛИ flag_sklad = 1)) {
          flag := 0
        } ИНАЧЕ {
          flag := 1
        }
      } ИНАЧЕ {
        flag := 0;
      }
    } ИНАЧЕ {
      flag := 0;
    }
    Ответ написан
    3 комментария
  • Возможен ли LIMIT на сгруппированные строки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MySQL 8 через оконные функции.
    Ответ написан
    Комментировать
  • Как настроить учетную запись root для аутентификации с помощью пароля?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    https://dev.mysql.com/doc/refman/8.0/en/validate-p...
    Как минимум, у вас в пароле должен быть один символ в нижнем и один символ в верхнем регистре (mixed_case_count = 1), одна цифра (number_count = 1) и один спецсимвол (special_char_count = 1).
    Ответ написан
    Комментировать
  • Как выполнить SQL запрос с присоединением другой таблицы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WHERE zakaz.data_zap='2022-12-14'А какая дата заказа, если в этой строчке заказа нет?
    Ответ написан
  • Как запросом проверить входит ли дата из списка в диапазон дат?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для MySQL 8 можно, но запрос страшненький
    WITH RECURSIVE `cte` AS (
      (SELECT `id`, `locationid`, `eventid`,
              TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`list`, ','), ',', 1), ',', -1)) AS `date`,
              1 AS `idx`
        FROM `test`
        HAVING `date` != '')
      UNION
      (SELECT `t`.`id`, `t`.`locationid`, `t`.`eventid`,
              TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`t`.`list`, ','), ',', `cte`.`idx` + 1), ',', -1)) AS `date`,
              `cte`.`idx` + 1
         FROM `cte`
         JOIN `test` AS `t` ON `t`.`id` = `cte`.`id`
         HAVING `date` != '')
    ),
    SELECT `id`, `locationid`, `eventid`, 
           CONCAT (SUBSTRING(`date`, 7, 4), '-', SUBSTRING(`date`, 4, 2), '-', SUBSTRING(`date`, 1, 2)) AS `date`
      FROM `cte`
      HAVING `date` >= :firstDate AND `date` < :lastDate

    Лучше один раз потратить время и нормализовать таблицу.
    Ответ написан
    3 комментария
  • Есть ли подводные камни у разворачивания на хостинге продуктов mySQL Workbench?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Эти ваши "гуру" просто ничего кроме примитивного PHPMyAdmin'а не знают. База ставится на хостинге, MySQL Workbench на рабочем компьютере. Подключение через ssh туннель, это штатная опция Workbench'а.
    spoiler
    63987fe479f70227963640.png
    Ответ написан
    1 комментарий
  • Есть ли в mysql автоопределение типа данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если это именно конфиг, без поиска/сортировки по значениям то кодируйте значение в JSON и сохраняйте как строку.
    Ответ написан
    Комментировать
  • Как в MySQL отсортировать по последнему значения по дате?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT `date`, COUNT(*)
      FROM (
        SELECT MAX(`date`) AS `date`
          FROM `Payments`
          GROUP BY `clientId`
      )
      GROUP BY `date`
    Ответ написан
    Комментировать
  • Связи в Mysql, как исправить ошибку 1215?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Проверьте, что среди значений `product`.`photo_id` нет таких, которые отсутствуют среди значений `photos`.`product_id`
    Непонятен, правда, смысл такой связи. Название `photo_id` намекает на то, что она должна быть связана с `photos`.`id`, а `product_id`, соответственно, с `product`.`id`. У вас же какая-то странная связь.
    Ответ написан
  • Не могу выполнить запрос к БД используя PDO. В чём проблема?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ЕМНИП, по умолчанию MySQL слушает только 127.0.0.1
    Надо разрешить слушать все адреса, 0.0.0.0
    Ответ написан
  • Как сделать выборку из трех таблиц?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вариант 1. Предварительно сформировать структуру вида
    {categoryId: {name: 'category_name', services: [services_list]}}
    и выводить уже подготовленные и отсортированные данные.
    Вариант 2. Добавить в запрос группировку по категории и собирать услуги каждой категории через JSON_OBJECTAGG.
    Вариант 3. Добавить в запрос сортировку по категории и выводить заголовок только при смене категории.
    Вариант 4. Делать отдельный запрос для списка категорий, отдельные запросы по услугам каждой категории.
    Ответ написан
    Комментировать
  • Mysql connect error [localhost]: (2002) No such file or directory (400)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Когда mysqli подключается к MySQL через localhost, он использует не сеть, а сокет юникс. Для этого должен быть правильно задан путь к файлу сокета - параметр mysqli.default_socket в php.ini. Он должен указывать на тот же файл, что и параметр socket в настройках MySQL.
    Альтернатива - подключение через 127.0.0.1. В этом случае соединение будет установлено через сетевую подсистему.
    Ответ написан
    1 комментарий
  • Почему поступает пустой запрос, и выдает ошибку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Бросайте вы эти видеоуроки, они вас плохому научат.
    1. Не надо напрямую подставлять переменные в запрос, для этого есть плейсхолдеры. Читать про SQL Injection.
    2. Не надо руками ловить ошибки mysqli. Надо устанавливать правильные опции при подключении. Читать https://habr.com/ru/post/662523/
    3. Если уж вы ловите ошибки самостоятельно, то выводите полный текст ошибки, а не просто паническое "Ой, что-то случилось!".
    4. Не надо хранить в своей базе данные кредитных карт клиентов, да ещё и вместе с CVV. Учитывая пункт 1, это всё равно, что писать их на заборе. Читать про PCI DSS.
    Ответ написан
    4 комментария
  • Где ошибка в SQL запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    3 комментария