Ответы пользователя по тегу MySQL
  • Как найти схожий текст в Mysql?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    https://bugs.mysql.com/bug.php?id=92392
    Последний пост как метод решения, или в процессе установки снимите галочку Server Data Files. Должно помочь.
    Ответ написан
    Комментировать
  • Что быстрее: select и update или просто update?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    есть поле datetime, и поле type в котором есть значения 1 или 2.
    И все? Больше полей нет?

    но из-за большого количества данных идёт сильная нагрузка.
    Большого это сколько? Сколько получается в итоговой выборке, сколько всего в таблице записей?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    GROUP BY date_format( date, '%Y%m%d' )
    ORDER BY date DESC


    И теги, я так понимаю, чисто для понта напиханы, а то вы бы определились, MYSQL или SQL SERVER...
    Ответ написан
    1 комментарий
  • Как в таблицу sql с 4 столбцами вставить список значений, в котором может быть меньше 4х значений?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Как это можно сделать?
    Средствами sql никак. Либо написать скрипт на 10 строк по перегону в нормальный формат, либо страдать ручками.
    Ответ написан
    4 комментария
  • Почему отправляется пустой запрос?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1)
    $number = filter_var(trim($_POST['cardNumber']),FILTER_SANITIZE_STRING);
    Не надо извращаться с непонятными (вам) функциями. filter_var тут не нужен.
    2) первым делом надо проверить что вообще в $_POST (используйте var_dump()).
    3) Четко знать какой запрос реально у вас создается. Сначала формируйте строку запроса, потом проверяйте что за строка получилась. А вообще нужно использовать подготовленные выражения, а не заниматься непонятной ерундой.
    4) Так же, у вас заглушены ошибки, вы просто не видите что за ошибки происходят.
    Ответ написан
    Комментировать
  • Как добавить запись к определенному пользователю Mysql через PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    для того чтобы что-то вводить в "данные пользователя", вы должны откуда-то знать что за пользователь вводит эти данные. Если у вас есть эта информация (ну например случайно оказалась записанной в сессию), берете id пользователя, и пишете запрос:
    Апдейт юзерс
    сет текст = "какой-то текст пришел из формы"
    вэа айди = юзерайди_полученный_допустим_из_сессии
    Ответ написан
  • Как вывести данные mysql для конкретного пользователя PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Читаем документацию:
    The enctype attribute can be used only if method="post".

    2) Файлы не передаются методом get
    3) Делаем выводы из 1 и 2.
    4) if(isset($_REQUEST['submit'])) - плохая проверка, начиная с того что я могу отправить форму не нажимая кнопку субмит, и заканчивая тем что такой проверкой вы не знаете какой запрос придет с клиента и что в нем будет (то есть вообще ничего кроме этой сомнительной переменной не проверяете).
    5) В данной структуре данных вы никак не можете привязать посты к пользователям. Либо нужно добавить поле, определяющее владельца поста, либо делать пивот таблицу, где записывать соответствия пар юзер-пост.
    6) Кроме того - у вас в коде отсутствует какое-либо понятие идентификации пользователей, то есть вы не знаете какой пользователь добавляет или запрашивает данные, что делает бесполезным само понятие принадлежности.
    Ответ написан
    Комментировать
  • Как сделать привязку данных таблицы к тому юзеру у которого открыта сессия на сайте(он авторизовался) привязка по типу id==userid?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    если решение наколеночное, не фреймворк, то в сессию пишется что-то типа $_SESSION['user']['loggedIn'] = true; По вкусу можно держать там же айди юзера, и например никнейм, чтобы два раза не бегать... Или взять движок типа лары и использовать что есть из коробки...
    Ответ написан
    Комментировать
  • Как конвертировать уже существующие записи в другую кодировку?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Мне нужен рецепт
    Рецепт зависит от ингридиентов, универсального рецепта нет.

    Столбец name из кодировки utf8mb3_general_ci в utfmb4_general_ci
    Просто смените ему кодировку, данные "сконвертируются" автоматически, так как "битность" существующих данных не поменяется. На всякий случай можно сделать копию таблицы и поиграться с ней перед сменой основной таблицы, но вообще-то разницы быть не должно.
    Ответ написан
  • Объеденить 2 модели при выводе?

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

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Я хочу, получив изображение из бд отобразить его на сайте через тег IMG, есть ли возможность на данный момент?
    Конечно есть. Вопрос только в подходе.
    есть 2 основных варианта:
    1) Передавать в шаблон бэйс64 строки вместо байтов. Как написал Дмитрий, вы можете это сделать прямо в модели, добавив метод кодирующий блоб в бэйс64. Или делать это в контроллере, не суть.
    Минусы - вы утяжеляете шаблон, так как бэйс64 где-то на 30% больше по объему, и блокируете загрузку шаблона до полной прорисовки изображения (так как картинка "вписана" в хтмл, и пока вы ее не получите, последующие блоки просто неоткуда брать). Если их много, нагрузка будет весьма значительной.

    2) Передавать линк на изображение. Естественно, линк будет вести на скрипт, а не на реальную картинку. Делаете роут для изображений, в контроллере ловите ключ картинки (айди или другой уникальный ключ из таблицы), по ней создаете модель и отдаете на клиент обычный байтовый поток. Естественно перед отправкой нужно отправить заголовок что "сейчас будет картинка". Тогда изображения будут загружаться отдельно от хтмл и грузить клиента вообще не будут.
    Минусы - надо писать роут и контроллер... ну и вроде все.

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

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Суть проблемы:
    Если это всё работает на MySQL, то не получается оптимизировать запросы "стандартными" методами...индексы выручают, но из-за "переменного" кол-ва ID'шников по фильтру s_id индексы не так эффективны...т.к. приходится сканировать много записей...
    Так, а в чем собственно проблема? Где тайминги запросов, где explain по медленным запросам?
    Ответ написан
  • Можно ли удалить последний параграф из строки mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Вообще возможно такое?

    Если текст весь разбит на параграфы, и последними строками всегда будет </p> тогда возможно через REGEXP_REPLACE. С некоторыми извращениями скорее всего можно и если не закрывающий тег в конце текста.
    Ответ написан
    2 комментария
  • Почему запрос в Yii выполняется медленнее?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Все дело в волшебных пузырьках в том что пхпмайадмин вас на... обманывает, так как на самом деле в его запросе не показывается "магия", которая в конце добавляет limit 25, о чем говорит надпись "отображение строк 0-24" .

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Для ООООЧЕНЬ простого букинга с большой натяжкой.

    Не вижу собсно отелей (или он будет один? Тогда это не букинг, а бронирование в отеле)

    Не вижу типов комнат (возможно это сайт бронирования конкретной квартиры покомнатно?)

    Эмоунт - это деньги? Тогда тип флоат не подходит.

    Что за фючеред_имэйдж? еще и интежер...

    Где опции в номере? Или в комнатах квартиры все удобства на улице и это где то отдельно текстом прописано?

    Короче пока на 2 с плюсом...
    Ответ написан
    6 комментариев
  • Как правильно сделать такой поиск?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Учимся думать:
    $search   = _string($_POST['search_string']);
    $sql = '
    SELECT * 
    FROM `chat` 
    WHERE `user_id` IN (
       SELECT `id` 
       FROM `users` 
       WHERE `login` LIKE "'.$search.'%"
    ) 
    ORDER BY `time` 
    DESC '; // делаем запрос отдельной строкой,
    var_dump($sql);
    //вставив в него переменную убеждаемся что там ерунда
    
    //пишем нормально
    $search   = $_POST['search_string'].'%';
    $sql = '
    SELECT * 
    FROM `chat` 
    WHERE `user_id` IN (
       SELECT `id` 
       FROM `users` 
       WHERE `login` LIKE ?
    ) 
    ORDER BY `time` 
    DESC '; 
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('s', $search);
    $chat_result = $stmt->execute();
    while ( $row = $chat_result->fetch_assoc() ) {
        echo $row['user_id'].'<hr>';
    }


    ps: и нет смысла делать серч через пост запрос, лучше через гет, так поисковый запрос можно например переслать или скопировать и переиспользовать.
    Ответ написан
  • Почему тормозит код записи в MySQL после разбивки его на функции?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вот к примеру была функция check_category - вообще ничего не записывала:
    $sql = "SELECT category_id,name FROM {$prefixTables}category_description WHERE name='".iconv('UTF-8', 'UTF-8', trim($str['category']))."'";

    $res = $pdo->query($sql);

    while($row = $res->fetch())
    {
    $category_id = $row['category_id'];
    }

    Это вы на каждый параметр делаете проверку таким образом, да? Ну тогда все логично, вместо одного запроса в бд у вас их много, вот и выходит лажа. То что она ничего не записывала не отменяет нагрузку на базу. База вообще самое узкое место практически всегда, по этому в базу нельзя лазить когда вздумается. Сделал 1 раз выборку всех нужных данных и с этим массивом работаешь.
    Ответ написан