Задать вопрос
Ответы пользователя по тегу MySQL
  • Устанавливать ли в php таймзону пользователя?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    5) Какие главные минусы против чтобы временную метку хранить просто как число unixtimestamp? То что выборки , когда нужны всякие DATE специфичные функции, потребуют преобразования в тип дату в каждой строке? (это преобразование может не сложное?, ведь datetime и так хранится как число)
    Как минимум то что у вас дата не хранится как дата. Про то что не будут работать стандартные функции работы с датами типа разницы в год, месяц, неделю и прочие весьма неочевидные преобразования я вообще молчу, чего стоит банальное вычисление количества дней до, например, конца месяца, с учетом того что каждый месяц имеет разную длину, не говоря уже про високосные года, ну и всякие расписания, где работа с минутами/часами без готовых функций тоже так себе удовольствие. Кроме того, таймстамп имеет свои ограничения, например в нем нельзя хранить даты раньше чем 1970 год, то есть пользователи старше 55 лет дату рождения сохранить не смогут. Ну и горизонт планирования до 2038 года, дальше все. Алсо, вы теряете защиту от кривых данных на уровне типа поля, что тоже +1 в копилку встроенных типов.
    В целом, таймстампы это именно метки, то есть "тогда-то произошло такое-то событие, относящееся к текущему времени", со своими ограничениями.
    Ответ написан
    Комментировать
  • Как в ходе распознавание номеров, записывать данные в БД, при этом исключить дубли?

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

    Если да, то:
    (поля и таблицы приведены для примера, естественно в реале они у вас будут немного другие)
    1) Номера должны лежать в отдельной табличке, идентифицирующей авто (cars например). Поля - id | number | comments. Номер должен быть с индексом unique.
    2) Интервалы пишутся в другую табличку - intervals, где есть id | car_id | start_time | end_time
    3) При заезде на сервис номер распознается и запрашивается из базы, если не находится - создаем новый, запоминаем id. Записываем в intervals.start_time текущее время, в intervals.car_id запомненный id машины или id выбранный из базы машин. Пишем end_time по таймеру, последняя запись будет временем окончания стоянки.

    В такой конфигурации то что механик прервал на минуту простой авто на общее количество времени не повлияет, и дублей, естественно, не будет. Просто для отчета нужно будет выбирать все интервалы за день для машин(ы). Агрегировать их или выводить списком особо разницы нет, тут как интерфейс устроен.

    PS: Оказывается проблема в "дублях", которые артефакты распознавания. Ну и реальная проблема в том что интервал на 1 машину только один, и даже небольшой перерыв в записи тупо стирает старые данные. Решается банальной нормализацией, выносом интервалов в отдельную сущность и связи по ключам машина-интервал.
    Ответ написан
  • MySQL: как реализаовать поиска по нескольким вхождениям?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Но тут возникает проблема в формировании prepared statements в PHP (PDO).
    А в чем проблема?
    $sql = 'SELECT * 
    FROM articles 
    WHERE name LIKE ? 
    AND name LIKE ?';
    $prep = $dbh->prepare($sql);
    $ret = $prep->execute(['%' . 'опух' . '%', '%' . 'поч' . '%']);
    Ответ написан
    2 комментария
  • В чем может быть причина сильного увеличения длительности ответа запросов при установке Load Balancer на 2 сервера со стаком MySQL, PHP, Nginx?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Нагрузка на ЦПУ при этом пике 30-40%
    это че за нагрузка при 3рпс? Профилирование нагрузки - первый шаг, балансер и горизонтальное расширение это шаг стопитьсот, когда вы упираетесь в потолок того что может вытянуть сервак. 90% что проблемы в количестве (и качестве) запросов к бд, крайне маловероятно что код у вас настолько сложный, что не вытягивает...

    обращается к основной БД через коннект по приватному IP адресу в сети серверов Амазон.
    Тестом запустите подряд 20-30 разных запросов с разным размером ответа, каждый замерьте, подозреваю что будете не очень приятно удивлены...

    запросы на дополнительном сервере начинают отрабатывать по 5, 15 а иногда и 50 секунд.
    А на основном все остается норм? В любом случае - профайлинг наше все, + под нагрузочным тестированием хоть как-то.
    Ответ написан
    2 комментария
  • Выборка строки из поля MySQL при помощи regex?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    для начала стоит посмотреть какого типа колонка `source`.`new.remains.costsum`, ее формат должен совпадать с форматом `target`.`remains_costsum` - double(15,5). В противном случае, если колонки не совпадают по типу, колонки не совпадают и по размеру и очевидно в `source`.`new.remains.costsum` содержится превышающее заданный диапазон значение.
    Ответ написан
  • Обновление таблицы в бд данными, которые когда-то были, но теперь отсутствуют - как?

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

    но что-то фигня какая-то получается, находит один единственный товар, который есть и в API и в бд
    По описанию вообще не ясно как вы ищете совпадающие товары, по этому есть мысль что проблема скорее в коде и алгоритме, чем в апи или базе.
    Ответ написан
  • Проблема миграции базы данных с mysql 8 на mariaDB 10?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже написал Akina, полной совместимости между этими версиями нет, но основной синтаксис без каких-то хитропопых движух по типу хранимок и кастомных/новомодных типов полей вполне совместим.
    Что можно попробовать:
    1) Добавить в начале дампа игнор внешних ключей, судя по всему у вас в транзакции происходит фигня, но что конкретно ее вызывает не видно, возможно таблица требует ссылки на внешний ключ, который еще отсутствует. В конце стоит снова включить контроль ключей. DISABLE KEYS и SET FOREIGN_KEY_CHECKS=0; в начале, и соответственно включить в конце дампа.
    2) Если база большая, а инсерты в дампе не разбиты по строкам на адекватные блоки, можно попробовать убрать транзакции и посмотреть что конкретно не нравится системе. Возможно надо разбить инсерты на более мелкие блоки вставки, а возможно есть действительно несовместимый синтаксис.
    3) Если такие танцы не помогают - костыли с методом описанным Akina, через csv и потом ручками связи/ключи/индексы/хранимки.

    UPD: Народ говорит что может помочь принудительное указание типа движка таблиц и предварительная конвертация:
    The tables must be InnoDB. After converting the tables to InnoDB, the database could be migrated
    Ответ написан
  • В чем ошибка SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) $params собственно нужен для биндинга, чтобы не вставлять данные прямо в запрос, так как это чревато инъекциями. По этому дебильный совет "просто поменяй на $stmt->execute();" желательно проигнорировать.

    2) Вместо переменных нужно вставить плейсхолдеры, именованные или безымянные не особо важно. Естественно количество плейсхолдеров должно совпадать с количеством элементов в массиве.

    3) Даже в таком виде как у вас запрос работать не будет, так как строковые переменные в рамках запроса должны быть в кавычках.

    4) WHERE $email что? Вы вообще понимаете что и для чего пишете? Просто переведя на русский "где емэйл" не кажется вам слегка странной конструкцией? Просто загляните в документацию SQL где описывается WHERE.
    Ответ написан
    Комментировать
  • Есть ли смысл перенести Mysql на другой сервер для ускорения сайта?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    В основном, видимо, нагружают они.
    Профилирование?
    Ответ написан
    2 комментария
  • Как сделать возможность добавления картинки товара, загружая её перед этим в БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть ли какие-нибудь хорошие файловые хранилище с которыми удобно и практично работать?
    Файловая система. Это самый удобный и практичный метод хранения мультимедийных файлов. В зависимости от ваших возможностей, компетенций и используемых технологий, вы можете использовать как локальную ФС, так и любое облачное хранилище через соответствующее АПИ, используя драйверы доступа к файлам, например как это реализовано в Ларавел.
    Ответ написан
    Комментировать
  • Функция SUM в sql запросе не работает почему?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Владею: Html, Css, Php, bd msql, сложные запросы SQL
    Рили???

    Ок, на самом деле решение очевидное, и весьма простое. Во втором запросе вы выбираете не столбец, имя которого будет ассоциироваться с ключом в соответствующем массиве (о чем вам и говорит ошибка), а результат агрегирующей функции, которое в массиве будет иметь совершенно другое имя. Что легко проверяется через var_dump($row).

    Решение - добавить алиас для агрегированного поля.
    Ответ написан
    Комментировать
  • Почему запрос возвращает пустоту?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    выводите свой запрос в строчку:
    $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    var_dump($sql); exit;
    $query = $this->db->query($sql);
    Идете в пхпмайадмин или консоль мускуля, вставляете и выполняете. Хотя для начала убедитесь что все вставленные значения хоть как-то похожи на правду.
    Смотрите что наотвечал вам сервер, если ответ вернул нифига - смотрите глазками что может быть не так с условиями в запросе, например какие из предоставленных данных точно отсутствуют в бд, или какие условия в энд противоречат друг другу... В конце концов начинайте удалять условия по одному, чтобы определить какое условие портит всю малину, затем думайте почему, есть ли данные удовлетворяющие этому условию в полученных результатах...
    Ответ написан
    Комментировать
  • Как внутри массива найти значения с разделителем и разбить эти строки?

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

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

    Минус - для поиска нужно строить достаточно объемные запросы, не помещающиеся в обычную логику по типу "селект вэа..." и требующие некоторого конструктора запросов. Так же, в большинстве случаев скорость запросов будет падать с ростом используемых атрибутов, но тут как раз нужно будет использовать фасетный поиск, то есть для группы товаров можно резко ограничить выборку через признак группы атрибутов, свойственные только этой группе, что сужает выборку и ускоряет поиск по тарибутам.
    Ответ написан
    2 комментария
  • Как подсчитать и вывести количество совпадений значения в строке при запросе в MySQL?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    group by + count()
    или
    count(distinct())
    Ответ написан
  • Почему постраничный вывод данных из бд не работает?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $count_m = "82;Тут очевидно синтаксическая ошибка сразу. Молчу про то, что числа намеренно передаются строками...

    if($this->page==1) {
    	$page = 1;
    }
    else {
    	$page = (int) $this->page;
    }
    Это что за магия? Что оно вообще делает? Что будет если единица ВНЕЗАПНО попадет в блок else??

    $start = ceil($count_m/$m_per_page);А теперь подумайте, как должна называться переменная, считающая общее количество страниц.

    суть в том, что когда формируется limit 72, 24, т.е 3 страница,
    Стоит пройти курс арифметики за 2 класс, и посчитать что 3 страница будет limit 48, 24.
    limit 24, 24 - вторая и limit 0, 24 - первая.
    Ответ написан
    1 комментарий
  • Как на OpenServer поставить MySQL выше 8.0?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Да, при условии наличия индексов помимо примари кей.
    2) Примерно то же самое - при наличии внешних ключей в эти таблицы запись будет идти медленнее с ростом количества записей и соответственно перестройки индексов.
    3) См. п. 2.
    Ответ написан
    4 комментария
  • Можно ли делать запрос к промежуточной таблице многие-ко-многим для извлечения конкретной информации?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?
    Из "промежуточной" можно извлечь только связи, она для этого и нужна.

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

    Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
    Какие - "такие"? У вас вообще ни одного запроса не написано.
    Ответ написан
    7 комментариев