Ответы пользователя по тегу MySQL
  • Как соотносятся между собой 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 комментария
  • Как вывести общее количество записей из базы данных?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    select count(*) as cnt from tbl_file
    Выводить обычным порядком, судя по предыдущим вопросам, работать с mysql из PHP вы умеете.
    Ответ написан
    Комментировать
  • Как раздавать уникальные записи таблицы во многопоточном парсере?

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

    Сначала забираем запись на себя
    update urls set proxy=proxy_id where done=null and proxy=null limit 1
    потом уже её селектим, работаем, и в конце отпускаем
    select * from urls where proxy=proxy_id
    ...
    Update urls set proxy=null, done=1 where proxy=proxy_id
    Ответ написан
    9 комментариев
  • Как построить структуру данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Насколько схема корректная с точки зрения проектирования?

    Непонятно, к чему здесь FeatureProps. Зачем тут многие ко многим?
    ProductProps (product_id, feature_id, prop_id) достаточно

    если я захочу заменить точечно на определённых товарах?


    Скорее всего, это будет уже новое свойство.
    Если захочется переименовать для отдельных товаров, то понадобится таблица feature_names(feature_id, product_id, name), которую лефт джойнить к запросу, и брать имя из неё, если есть.

    Имена таблиц тоже лучше делать в нижнем регистре. Сбережёт некоторое количество нервных клеток.

    На всякий случай предупрежу: Если продукт дойдёт до продакшена, то искать всё равно будете Эластиком. И как следствие - выкините весь EAV за ненадобностью, а все свойства сложите в JSON
    Но для практики конечно поколупаться конечно полезно
    Ответ написан
  • Почему тормозит код записи в MySQL после разбивки его на функции?

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

    В целом, цифры какие-то дикие. Что 8 секунд, что 16, что 3. Для записи одного "продукта" нужно максимум 0.1 секунды, если всё очень сильно тормозит
    Ответ написан
  • Существует ли тип данных List или Array в MySQL?

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

    Соответственно, inventory - это просто таблица из двух полей, id игрока и id скина
    Ответ написан
    Комментировать
  • Поиск по нескольким свойствам по динамическим записям?

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

    В принципе, поиск по одному значению - это просто, по джойну на каждое свойство. Но вот когда выбор из нескольких...
    Как-то так должно по идее работать
    SELECT p.*, sum(po1.classifier_id=1) num1, sum(po2.classifier_id=2) num2 FROM products p
        left JOIN product_options po1 on po1.product_id = id and po1.classifier_id=1 and po1.option_id in (1,2)
        left JOIN product_options po2 on po2.product_id = id and po2.classifier_id=2 and po2.option_id in (10,11)
    group by id having num1 > 1 and num2 > 1;
    Ответ написан
    Комментировать