Ответы пользователя по тегу MySQL
  • Insert if not exist MYSQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    insert с WHERE как бы не сосуществуют. Вы можете либо использовать if, либо сделать эту пару ключей уникальной, и использовать insert on duplicate key ignore.
    Ответ написан
    7 комментариев
  • Как подключиться к MySQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Нет, если наружу база не смотрит, а обычно так и есть. И это нормально. На самом деле это обычно не нужно. С чего вдруг понадобилось так активно работать на хостинге с базой? Локально создаете бд, экспортируете, на хосте поднимаете. Ну или если это более-менее нормальный движок с поддержкой миграций вообще через них.
    Ответ написан
    Комментировать
  • SQL запрос выборка из 2х таблиц?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - всегда форматируйте код, и вам легче, и ошибок меньше, и людям приятно смотреть...
    SELECT id name // выполнится, но не так как задумано, не хватает запятых
    FROM table1 
    LEFT JOIN b as // здесь все совсем плохо
    (  
               SELECT worker_id date value //тут уже даже не выполнится
               FROM table2 
               WHERE data = 'интересующая дата'  //date же!
    ) 
    ON table1.id = b.worker_id //могло бы даже работать, но выше куча ошибок
    WHERE date = 'null' // так работать не будет. date IS NULL будет, но у вас вроде нужно value проверять?

    Кроме прочего - тут должен был быть просто джоин 2 таблиц, без всяких танцев, ну и дата судя по всему должна быть в интервале, а не одно число, хотя тут уже не совсем ясно что там вообще и как хранится. Так же имена полей надо обрамлять `обратными кавычками`
    Ответ написан
    2 комментария
  • Как сделать вывод данных с текущего аккаунта через MySQL и PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Сессия. Не та которую ты мог бы завалить в институте, а сессия - метод хранения данных между запросами.
    Ответ написан
    Комментировать
  • Не работают запросы INSERT и UPDATE, что я сделал не так?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Подскажите пожалуйста, что я делаю не так
    Не занимаетесь отладкой, а занимаетесь гаданиями.

    и где может быть моя ошибка.
    В произвольном месте. По этому проверяют по порядку
    1) Что передается в data в яваскрипте (console.log)
    2) Что передается в на сервер (смотрим нетворк браузера)
    3) Что получили на стороне сервера (var_dump и тот же нетворк, смотрим ответ аякса)
    4) Проверяем запрос, и с таким заданием плейсхолдеров бинд не нужен:
    $stm = $this->db->prepare($sql);
    $stmt->execute($params);
    Ответ написан
    Комментировать
  • Получить массив в строке из mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как сделать случайную выборку записей?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Задача на самом деле нетривиальная, но очень распространенная. Одним из самых "качественных" вариантов решения для стандартной слаборазряжённой базы является выборка максимального и минимального значения первичного автоинкрементного ключа, а затем формирование набора из N случайных чисел между ними средствами языка (пхп, ноды, го, не суть), где N тем больше, чем больше разряженность базы. Далее делается выборка с in, и уже по результатам выборки берется случайная запись из группы полученных. Насколько я помню это самый эффективный и быстрый способ.
    Ответ написан
    Комментировать
  • Какая лучше практика для создания уникального числа и запись его в таблицу, с проверкой на уникальность в этой же Таблице?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - что у вас называется пином? текст, число, какая длина и в каком формате хранится и для чего используется? Насколько это "секьюрная персональная информация"?

    интеджер от 5 до 7 символов
    В идеале, если это пин, он должен содержать какое-то определенное количество символов. Это удобно по многим причинам.

    1 вариант - настроить таблицу на автоинкремент от какого-то пятизначного числа, сделать шаг автоинкремента отличным от единицы и использовать его в качестве пина. Минусы очевидны - привязка к ид, предсказуемость, пляшущая размерность. Плюсы - гарантированная уникальность.

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    как грамотнее всего подключаться и отключаться к базе данных.
    Грамотнее всего использовать готовые фреймворки, или хотя бы компоненты от популярных качественных фреймворков.

    Так же нет необходимости закрывать соединение, оно само автоматически закроется по завершении пхп скрипта.

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    селект, джоины, вэа, энд, ор...
    Ответ написан
  • Почему не сохраняется JSON в БД?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    По уму вы должны были дать кейс сенситив коллэйшн для поля, по которому собираетесь делать кейс сенситив выборки. Как "кривое" решение можно использовать BINARY, как написал Илья
    Ответ написан
  • Сделать все в 1 запросе или по отдельности?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    2 запроса, один с count(*), второй с нужным количеством и сдвигом, в зависимости от текущей страницы и количества на странице.
    Ответ написан
  • Как организовать таблицы в бд?

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

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

    Ну и есть 3 вариант, который в данном КОНКРЕТНОМ случае подходит меньше, но в целом более подходит под смысл - общая таблица сущностей с базовыми параметрами + множество атрибутов для подгрупп сущностей. Называется EAV.
    Ответ написан
    Комментировать
  • Как решить задачу sql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    селект имя, сум(часы) часы
    фром имена и
    лефт джоин тайм т
    он и.ид = т.емплои_ид
    груп бай т.емплои_ид
    ордер бай часы деск лимит 3

    как то так...
    Ответ написан
    9 комментариев
  • Как не танцевать на граблях с бубном делая CRM?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Наиболее затратное по времени выполнения это расчет остатков за весь период на указанную дату в разрезе по номенклатуре.

    1) Это ваше предположение или вы делали замеры производительности запросов и кода?
    2) Если производительность действительно проседает, то каким образом у вас происходит вычисление? SQL с агрегацией и каунтом?
    3) Сколько строк в таблицах выборки?
    4) Что показывает explain?
    5) Индексы?

    Если оптимизировать по выборкам не получается и все упирается в запрос, то можно конечно выводить суммы помесячно, а затем делать агрегацию по суммам + довыборку из неполных месяцев, но тут есть свои нюансы, помимо очевидного усложнения кода и денормализации, как минимум не всегда все обороты намертво приколочены к концу месяца и могут меняться задним числом, что тоже надо будет учитывать и пересчитывать итоги при внесении таких правок.

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Самое простое что приходит на ум - хранить парент_айди, рут_айди и левел. Тогда для любого узла можно легко выбрать всех потомков.
    Ответ написан
  • Почему не хочет вытаскивать данные ИЗ бд или не работает переменная?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1)
    WHERE `ID`={$_GET['id']}
    за такое в приличном обществе бьют клавой по кумполу, до полного просветления.
    2) есть важнейшая функция, которую почему то все новички игнорируют - var_dump(); 100% решает проблемы, главное - правильно и часто использовать.
    3) Если есть запрос и возникает проблема с его использованием - выводите запрос (как строку) и запускайте этот запрос "вручную", например через пхпмайадмин.
    4) Вангую что вывод ошибок и варнингов у вас выключен. Смотрите логи или включите вывод ошибок.
    Ответ написан
    1 комментарий
  • Как в MySQL создать атоматическое заполнение полей?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    2 комментария
  • Как сравнить даты в MySQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Как вариант я думал написать говнокод, который на PHP преобразует первоначальную дату диапазона из 26.05.2020 в "2020-05-26 00:00:00" а конечную дату в "2020-05-27 23:59:59" а потом сравнивать, но помоему это какая-то дичь.
    То есть по вашему преобразовывать ВСЕ строки таблицы для сравнения в формат НЕ ПОДДЕРЖИВАЕМЫЙ интерфейсом бд это ок, а 2 значения привести в стандарт - не комильфо...

    Обратите внимание на ответ Rsa97, Даты сравниваются как строки, по этому и сравнение идет именно в таком формате, от года к дате. Ваше преобразование делает строки вывернутыми по смыслу, то есть сортировка идет по дате дня, год "как бы вообще не учитывается".
    Ответ написан
    Комментировать