Задать вопрос
Ответы пользователя по тегу MySQL
  • Как взять все из таблицы, но с уникальным условием?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для того, чтобы взять всё из таблицы, но с уникальным условием, надо сначала подумать.
    Над тем, от какого конкретно title мы хотим получить id
    Если исходить из того, что может быть несколько записей с одним и тем же title, у них будут разные id.
    И по этой причине надо задаться вопросом - какой именно id из этих нескольких мы хотим получить. И зачем.

    И после этого либо изменить вопрос, либо структуру базы данных.
    Ответ написан
    Комментировать
  • Будет ли использоваться индекс в запросе вида WHERE `field1` LIKE '_aa_a_'?

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

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

    Полнотекстовый индекс также не является чем-то особенным в этом плане. Он устроен по совершенно тупому принципу: грубо говоря, БД берёт текст из колонки, и разбивает его на слова. И строит по этим словам снова точно такой же отсортированный список, с указанием, в каких строках это слово используется. То есть когда мы делаем запрос с match, то mysql находит искомое слово в индексе, и возвращает из него все строки.

    И точно так же полнотекстовый индекс не работает, если поставить звёздочку спереди. Мануал так и говорит:
    Words match if they begin with the word preceding the * operator

    То есть звездочка работает только если поставить её в конце слова.
    match against ('класс*') найдёт слово "классный", а '*accный' его уже не найдёт.
    То есть БД тебе сразу говорит, что для такого поиска полнотекстовый индекс будет бесполезен.
    Ответ написан
    Комментировать
  • Как узнать баланс юзера?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    5 июня вы уже задавали этот вопрос.
    Если за три месяца вы так и не освоили базовые приёмы работы с БД в РНР, то может ну его совсем?
    Тем более что при таких-то дырищах всё равно это будет не баланс, а решето.
    Ответ написан
    Комментировать
  • Как быстро найти совпадение в базах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    либо цикл for в котором перебираются название баз данных и идет поиска по таблице
    либо навести один раз порядок в этом бардаке
    например, если это multi-tenant приложение, то запрашивать не только логин и пароль, но и приложение, например в виде субдомена.
    при текущей структуре ничто не мешает появлению одного и того же пользователя в разных базах
    Ответ написан
  • Как настроить кодировку?

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

    Я бы не стал делать никаких специальных телодвижений по перекодированию ошибок виндоус. На боевом сервере эта проблема будет неактуальной, а пару раз при разработке можно и потерпеть.
    Как вариант - сделать запись ошибок в лог, и смотреть их каким-нибудь Блокнотом - он покажет нормально.
    Ещё как вариант - не использовать опенсервер или чем вы там пользуетесь, а использовать встроенный сервер РНР - он перекодирует выводимые на экран ошибки в utf-8.
    Ответ написан
    1 комментарий
  • Как лучше поступить с таблицей бд?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Можно удалять по первичному ключу, можно помечать как удалённые. Сам вопрос холиварный, единого ответа на него нет. Исходите из требований своей бизнес-логики.
    К "выгоде" этот вопрос отношения не имеет.
    Ответ написан
    3 комментария
  • Как соотносятся между собой mysql и mariadb?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для вашего уровня разницы никакой.
    Ответ написан
    Комментировать
  • Как составить запрос MySQL?

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Написано же, простым русским языком: download each 24 hours & cache it
    То есть никаких "реализовано через api" тут быть не может. Разумеется, при работе с внешними АПИ полученные данные всегда сохраняются локально, и показываются из кэша. В простейшем случае кэш пишется в файл, но удобнее работать с базой.

    "Как сохранять данные полученные с api в базу?" вопрос откровенно дурацкий. Точно так же, как и любые другие.
    Ответ написан
    Комментировать
  • Why does Not all parameters were used in the SQL statement error apear?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    "I am try" звучит примерно как "я попытайся".

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

    В том, чтобы наугад писать какие-то слова от балды, нет ничего зазорного - мы все так делаем. Примерно как с английским - да какая разница, try или trying? Но в отличие от английского, языки программирования позволяют нам проверить, соответствует ли результат ожидаемому.
    И в данном случае сообщение об ошибке нам даже подсказывает, куда смотреть: ему явно не нравится значение, которое мы добавляем в БД. И дальше надо сделать две простые вещи:
    Первое - спросить себя, сколько значений мы хотим добавить в БД?
    И второе - распечатать переменную, которая содержит эти самые значения. Сделать такую банальность, как print(val). И сравнить реальность с ожиданиями.
    А дальше совсем просто - полюбовавшись на дело рук своих, начинаем смотреть: каких-таких функций мы навызывали, что у нас получился такой результат. И избавиться от ненужной.

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для человека, который только-только осваивает азы SQL, важно для начала понять, как работает вот такой базовый вариант. Как вообще таблицы соединяются между собой.
    select p.* from products p 
    join product_country pc1 on pc1.product_id=p.id and pc1.country_id=1 
    join product_country pc2 on pc2.product_id=p.id and pc2.country_id=2

    [inner] join находит все записи из левой таблицы, для которых есть соответствие в правой таблице, и которые удовлетворяют условию в ON.
    Соответственно, первый джойн отбирает все записи, которые соответствуют country_id=1,
    а второй - оставляет из получившегося набора только те, которые соответствуют и country_id=2
    Ответ написан
    Комментировать
  • Как проселектить несколько ближайших пользователей по рейтингу?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    select * from users where rating < ? order by rating desc limit 10
    select * from users where rating > ? order by rating limit 10
    Ответ написан
    1 комментарий
  • Как обновить данные в mysql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Кто ж вас учил так с БД работать?
    Во-первых, данные всегда должны всегда передаваться в запрос отдельно.
    Во-вторых, код соединения совсем непонятный.
    Если используется mysql.connector, то надо как-то так
    import mysql.connector
    conn = mysql.connector.connect(host='127.0.0.1', database='test', user='user', password='')
    cursor = conn.cursor()
    sql = "UPDATE `user` SET `participate`=%s WHERE `id` = %s"
    cursor.execute(sql, [number, id])
    conn.commit()
    Ответ написан
    5 комментариев
  • Почему не номер телефона не проходит соответствие шаблону в БД?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    С каких пор LIKE стала работать с регулярками?
    select 9998887766 REGEXP '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    Ответ написан
    1 комментарий
  • Почему запрос в базу с IN затрагивает только последнюю строку при запросе из PHP-кода?

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, зачем тут первый запрос?
    Во-вторых, кроме количества совпадений надо наверное запрашивать и сам id? Ну по логике? если мы хотим вывести id, то надо наверное это поле указать в SELECT?
    В-третьих, надо добавить группировку, GROUP BY
    В-четвёртых, если надо вывести любые значения из первой, а не только те, у которых есть записи во второй, то нужен LEFT JOIN
    Ответ написан
    Комментировать
  • Как лучшего всего хранить неопределенный по размеру массив данных в БД?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как правильно заметили выше, неопределенный по размеру массив данных в БД - это таблица.
    Ответ написан
    Комментировать
  • Как правильно отправить в базу данных сразу несколько ссылок на картинки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

    Но главные проблемы этого кода конечно не в json.
    Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
    Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
    Остальное уже мелочи.

    Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
    Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

    Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
    При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
    При выводе файлы читаются из этой папки и выводятся.
    Ответ написан
  • В PHP 5.6 и MySQL Emoji отображаются как ????

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    mysql_query - это какой-то бред и анахронизм. Этой функции давно нет в языке.
    Кодировка соединения задаётся либо через mysqli_set_charset либо через DSN, в зависимости от выбранного API

    В целом,при использовании utf8mb4 всё должно работать
    Ответ написан
    Комментировать
  • Как получить несколько значений из базы данных по id в одном запросе?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $sql = $link->query('SELECT sum(quantity) FROM oc_product WHERE product_id in (8908,8909)');
    $row = $sql->fetch_row($sql);
    echo $row[0];
    Ответ написан
    4 комментария