Задать вопрос
Ответы пользователя по тегу MySQL
  • Почему выскакивает эта ошибка при INSERT INTO?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что одинарные кавычки имеют в программировании определенный смысл, и их надо писать только там, где надо, а не просто добавлять от балды в код?
    Ответ написан
    8 комментариев
  • Как перенести данные из нескольких таблиц в одну?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    insert into odna (col1, col2) select col1, col2 from drugaya;
    insert into odna (col1, col2) select col1, col2 from tretya;
    Ответ написан
    Комментировать
  • Как узнать наличие записи в базе данных и получить нужные значения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Весь код у вас уже есть.
    Вам только надо самому решить, чего вы хотите - проверить наличие записей, или выполнить дальнейшие действия.

    Код у вас - для второго.
    А пытаетесь вы его использовать для первого.

    Чтобы проверить, цикл не нужен. Чтобы обработать - КАК вы обойдетесь без цикла?

    В принципе, я тут не вижу нужды проверять. Просто запросить, да обработать.
    Но если прям жить не можете без проверки, то можно например использовать переменную
    $found = false;
    foreach($result as $row){
        $found = true;
        $orderId = $row["orderId"];
        // делаете что хотите
    }
    if(!$found) {
        print 'нет';
    }


    Если запись может быть только одна, то еще проще

    $result = mysqli_query($mysqli, "SELECT * FROM `Order` WHERE status='NEW'");
    $row = $result->fetch_assoc();
    if ($row) {
        $orderId = $row["orderId"];
    } else {
        print 'нет';
    }
    Ответ написан
  • Что означает длина поля int?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Размер, указываемый для поля типа int, не влияет на значения. И - как следствие - не влияет и на занимаемую память. Непонятно, с чего вы решили обратное.
    Если поле типа int(1) позволяет сохранить значение 4294967295, то естественно, что и памяти оно будет занимать те же 4 байта, что и int(10)

    Цифра эта ни на что не влияет, и имеет скорее декоративное значение.
    Если хотите сократить память/предельное значение, то используйте другой тип поля -
    TINYINT занимает 1 байт, до 255
    SMALLINT занимает 2 байта, до 65535
    MEDIUMINT - 3 байта, до 16777215
    Ответ написан
    1 комментарий
  • Как сформировать запрос?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    У меня получилось как-то так
    select sum(o.sum), sum(fsum) from orders o left join 
    (select order_id, sum(price) fsum from foodcost where order_id in (1,2) group by order_id) t
    on o.id=t.order_id 
    where o.id in (1,2);

    То есть группировать продукты перед джойном.
    Ответ написан
    Комментировать
  • Можно ли индексировать varchar в mysql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Можно
    Ответ написан
    Комментировать
  • Чистый php, если нет Бд, то можно ли её создать?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Можно, но код, который создает БД при ошибке - это глупость.
    Так не делают.

    Можно создать отдельный скрипт для настройки окружения, который создаст БД и таблицы например.
    В этом скрипте просто не указывать 4-й параметр в mysqli_connect.
    И дальше просто написать mysqli_query() c запросом создания таблицы.

    Но в реальной жизни такие ситуации практически не встречаются.
    В отличие от ламерского опенсервера, на реальных серверах никто никогда не ходит в базу под рутом. А у того пользователя, который используется, тупо нет прав на создание БД.

    spoiler
    И отучайтесь уже писать этот говнокод, or die("Ошибка соединения с БД." . mysqli_error($link));
    он и так-то всегда был признаком профнепригодности, а в современном РНР уже и вовсе не имеет смысла
    Ответ написан
    5 комментариев
  • Как добавить новую запись в существующую таблицу?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В целом направление верное, надо только соблюдать верный синтаксис. То есть выбирать сущевтвующие поля по отдельности, а не склеивать их зачем-то в одно через CONCAT

    Плюс вы выполняете не тот запрос, который показываете, а какой-то, в котором iNSERT написано с маленькой буквы, и перед ним еще зачем-то болтается `goods_categories`
    Ответ написан
    Комментировать
  • Насчет экспорта таблицы MySQL в Excel средствами PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну например можно генерить html

    Кстати, в этом примере просто попробуйте Content-Type: text/csv
    только вместо разделителя тогда лучше использовать точку с запятой.
    Ответ написан
    2 комментария
  • Как в mysql.connector отключить добавление одинарных кавычек?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Никак.
    Собирать запрос через f-word и выполнять без параметров.
    Ответ написан
    Комментировать
  • Как вставить данные в две таблицы сразу?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Вставить в первую
    2. Вставить во вторую.

    При возникновении ошибок - прочитать и исправить.
    Ответ написан
    5 комментариев
  • Как объединить поиск по тегам и названию поста в MySQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В запросе ничего сложного, всё так, как вы и описали
    Только, разумеется, в одном запросе.

    Для этого пора бы уже освоить джойны. Нормализацию БД вы освоили - это прекрасно.
    Джойны - тоже не бином ньютона, это основа SQL. Второй запрос не нужен, всё делается в одном
    Сначала выбираем фильмы по тегам
    select f.* from sakila.category c
    join sakila.film_category fc on fc.category_id = c.category_id
    join sakila.film f on f.film_id = fc.film_id
    where c.name in ('Action', 'Drama') 
    group by f.film_id;

    Если хотим добавить поиск по заголовку, то просто добавляем к этому же запросу еще условие во WHERE, and description like '%Drama%'
    https://sqlize.online/sql/mysql57/8d7c91ad5f6cf415...

    Правда на таких объемах LIKE делать не рекомендуется. Но если сейчас работает по всей базе, то по десятой части и подавно будет. Но в целом надо уже прикручивать внешний поисковый движок, ElasticSearch. Ну или хотя бы добавить полнотекстовый индекс по названию (и тексту тогда уж заодно) и искать в них через match...against
    Ответ написан
    2 комментария
  • Как оптимизировать базу данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы оптимизировать сайт по скорости загрузки, надо не читать разный мусор в интернете, а сначала разобраться, в каком именно месте тормозит.
    Потом с этим местом приходить на Хабр

    Бессмысленность хаотичных телодвижений на основании информации из интернета показывает уникальный индекс на id, который здесь нужен как корове седло.
    И полный АДЪ в виде ключа normal.
    Ответ написан
    2 комментария
  • Как перекачать данные с мастер сервера на слейв?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уже отвечал сегодня - Percona XtraBackup
    Ответ написан
    Комментировать
  • Реализация автоматического обновления БД?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Делать Percona XtraBackup по крону на бою, и потом накатывать его на тест.
    Остальное - от лукавого. "Через консоль" будет блокировать таблицы, что такое "через экспорт-импорт" непонятно что значит, а ивенты тут вообще не при делах.
    Ответ написан
  • Ошибка синтаксиса mysql как исправить?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    mysqli_query() выполняет только один запрос.
    если надо выполнить два, то надо вызвать эту функцию два раза

    кодировка соединения должно выставляться не SQL запроса, с с помощью специальной функции.
    SET GLOBAL на хостинге работать не будет
    Ответ написан
  • Как правильно деплоить mysql базу/миграции?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если это не хайдлоад, то есть 95% всех случаев, то никакой проблемы и нет, альтеры отработают быстро.
    В остальных случаях примерно такая схема и применяется, только непонятно, зачем всю базу-то гонять.
    https://github.com/github/gh-ost
    https://docs.percona.com/percona-toolkit/pt-online...
    Ответ написан
  • Как выбрать значение по наибольшему ключу из объекта json?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Традиционный ответ: Не хранить в JSON данные, которые для этого не предназначены.
    А хранить их нормально - в предназначенной для этого связанной таблице.
    Ответ написан
    Комментировать
  • Почему не записываются буквы при регистрации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уж сколько раз твердили миру...
    На конференции к звездам надо приходить запросы надо выполнять подготовленными.
    А не вот это вот всё.
    Иначе проблемы с буквами покажутся детской щекоткой.
    Какой вообще смысл делать регистрацию, если любой школьник сможет войти под чужой учёткой вообще без пароля, через простейшую SQL инъекцию?

    Надо забыть про mysqli_query и освоить функции prepare(), bind_param(), и execute(). Причём не только для insert, но и для select тоже. Потому что через него можно будет повытаскивать все пароли. Поскольку они ещё и не захэшированы.
    Ответ написан
    Комментировать
  • Как составить логику бд и запроса?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо хотя бы что-то делать самому.
    Обычный inner join выберет только те продукты, который относятся к выбранной стране, и только те подкатегории, которые относятся к этим продуктам (при условии, что подкатегории как-то связаны с продукатми). Ничего "сложного" или каких-то хитрых запросов здесь не нужно.
    Вывести родительские категории чуть сложнее, но тоже надо сначала самому попытаться, а не просить чтобы написали целиком запрос.
    Ответ написан