Ответы пользователя по тегу MySQL
  • Можно ли индексировать 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 раз выборку всех нужных данных и с этим массивом работаешь.
    Ответ написан
  • Не редактируется БД через PHP. Что делать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $id = $_GET['id'];
    $_id = mysqli_real_escape_string($link, $id);
    Ок, то что мы не умеем в подготовленные выражения вместо бредового "экранирования" пол беды, и даже не страшно что операцию так то можно в 1 строку прописать, но далее
    $name = $_POST['name'];
    $age = $_POST['age'];
    $salary = $_POST['salary'];
    Ну типа, ид мы проверили, на этом наши полномочия все...

    Файл Update.php не выдает никаких ошибок после введения формы, но при этом данные не вносятся.

    Во первых - перестаньте называть файлы в разном регистре, если это не классы!!!
    Во вторых - смотрим доку по mysqli, в частности рекомендуемая процедура подключения:
    <?php
    /* Вы должны включить отчёт об ошибках для mysqli, прежде чем пытаться установить соединение */
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
    /* Установите желаемую кодировку после установления соединения */
    mysqli_set_charset($mysqli, 'utf8mb4');
    printf("Успешно... %s\n", mysqli_get_host_info($mysqli));
    После этого уже можно что-то смотреть, например что вернул print_r ($check);...
    Ответ написан
    2 комментария
  • Как правильно выставлять кодировку в бд?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Искал решение, почти везде писалось одно и тоже - нужно выставить кодировку при создании базы, нужно вставить команды в конфиг mysql и тому подобное. Всё это у меня стоит, но помогло ток одно решение, а именно - выставлять кодировку при подключение к бд.
    Кодировку абсолютно правильно сказано - надо выставлять везде, так как во первых при переносе или изменении конфигурации софта все съедет на дефолтные настройки, которые везде разные. По этому и есть конфиги и настроечные переменные. Единственно кодировку соединения лучше поставить utf8mb4, так как это более современный и обратно совместимый формат.

    UTF-8, выставляю с помощью - header('Content-Type: text/html; charset=UTF-8');
    Это можно спокойно вынести в конфиг php.ini, или добавить более универсальный код, не требующий руками каждый раз заголовки править: ini_set('default_charset', 'utf-8');
    Ответ написан
    Комментировать
  • Теряется соединение с MySql(Python). Что делать?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Итак, в предыдущем вопросе я сделал блок try except в надежде, что оно восстановит мне соединение, но только что я обратился к боту и ошибка вернулась.
    Вам в прошлом ответе уже подсказали, что вы не имеете в итоге никакой ссылки на объект подключения, а тупо произвели некоторые действия, ака карго культ. На самом деле вам нужно полностью повторить код подключения в ексепшене, так как cursor у вас все равно остается пустой, а должен содержать ресурс соединения (или объект подключения, не помню как в питоне точно называется).
    Ответ написан
  • Как убрать заглушки в БД?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    flexpc,
    они приходят из TextBox. И я не понимаю как вместо их подставлять значения, они же в переменных хранятся
    MySqlCommand принимает в конструктор строку, соответственно получаете строку конкатенацией переменных и вашего запрса, естественно значения надо вставлять в соответствующие места, где у вас сейчас вбиты заглушки.
    Ответ написан
  • Работа с базой данный MySQl AspNet MVC?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Имеется проект на котором нужно реализовать БД MySQL.
    Че, прям написать MySQL с нуля?
    Unable to connect to any of the specified MySQL hosts.
    Очевидно что нет подключения к бд. Во первых - скорее всего вы ее еще не написали же (шутка?), во вторых - вы проверили что мускуль запущен, через консоль к нему можно подключиться с данными, прописанными в коде подключения, и пользователь от имени которого запускается приложение имеет нужные права?
    Ответ написан
  • Оптимальное хранение данных в БД?

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

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

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

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    У меня сейчас имеется одна таблица для одного поста.
    Точно? Это на сайте будет один пост? Или под каждый пост будет таблица? Или все таки одна таблица для постов? (читать про нормальные формы бд, 1,2 и 3 НФ)

    Но как лучше реализовать комментарии, чтобы была одна таблица, но там хранились комментарии из разных постов?
    Очень просто: Таблица, где будет поле post_id, которое будет указывать на пост, к которому относится комментарий. Если структура иерархическая, то еще parent_id, указывающий на какой комментарий это ответ. (Читать про отношения Один-ко-многим, хотя и про остальные тоже для общего развития. Ну и про иерархические структуры через nested sets)

    понимаете, если будет много комментов, то долго будет обрабатываться. =/
    Понимаете, вы нихрена не разбираетесь в вопросе, но уже уверенно несете чушь про "будет долго обрабатываться", хотя точно этого не знаете (спойлер: не будет долго обрабатываться).
    Ответ написан
    2 комментария
  • Как сделать выборку по трём таблицам?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Просто через LEFT JOIN получается так что продукт дублируется столько раз сколько имеет соответствий с таблицей INFORMATION.

    GROUP BY p.id
    ORDER BY s.rating DESC i.int DESC
    Ответ написан
    2 комментария
  • Ошибка MySQL: ER_PARSE_ERROR, что делать?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    const [row] = await dbConnection.query( логин или нет. 
            "SELECT * 
             FROM `users` 
             WHERE `name` = ? 
             AND `password` = ?",
         [username, password] // <- тут ОДИН МАССИВ, RTFM!!!
        );
    Ответ написан
  • Как реализовать "живой" поиск на базе Node и MySQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Если подразумевается что поиск будет производиться прямо во время набора текста в поле ввода, то довольно простая схема:

    На поле набора вешается онкейап листенер,
    по событию содержимое поля отправляется аяксом на сервер,
    там делается выборка нескольких значений, удовлетворяющих поисковой строке,
    обратно присылается этот набор, либо в виде жсон и дальше парсится в хтмл, либо сразу сформированный хтмл,
    данные лепятся как список ниже поисковой строчки, на кнопки вниз/вверх подсвечиваем строки из подсказки (фокус с поля надо убрать),
    по ентеру в поле вносим полную строку из подсказки и субмитим форму поиска, либо по клику тоже самое.

    Нюанс: По кейап надо ставить небольшую паузу, чтобы не спамить запросами.
    Ответ написан
    Комментировать