Ответы пользователя по тегу MySQL
  • Почему запрос возвращает пустоту?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    выводите свой запрос в строчку:
    $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    var_dump($sql); exit;
    $query = $this->db->query($sql);
    Идете в пхпмайадмин или консоль мускуля, вставляете и выполняете. Хотя для начала убедитесь что все вставленные значения хоть как-то похожи на правду.
    Смотрите что наотвечал вам сервер, если ответ вернул нифига - смотрите глазками что может быть не так с условиями в запросе, например какие из предоставленных данных точно отсутствуют в бд, или какие условия в энд противоречат друг другу... В конце концов начинайте удалять условия по одному, чтобы определить какое условие портит всю малину, затем думайте почему, есть ли данные удовлетворяющие этому условию в полученных результатах...
    Ответ написан
    Комментировать
  • Как внутри массива найти значения с разделителем и разбить эти строки?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В цикле делать explode по разделителю, если полученный массив имеет длину более 1 - вложенный цикл, перебираете полученный массив, если длина = 1 то просто берете само значение.
    Ответ написан
  • Как грамотно сделать поиск по фильтрам и где хранить характеристики?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для неоднородных сущностей с произвольными наборами свойств обычно используют EAV таблицы, что позволяет создать любой набор свойств для любого экземпляра сущности (например уникальные свойства для каждого товара).

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    group by + count()
    или
    count(distinct())
    Ответ написан
  • Почему постраничный вывод данных из бд не работает?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $count_m = "82;Тут очевидно синтаксическая ошибка сразу. Молчу про то, что числа намеренно передаются строками...

    if($this->page==1) {
    	$page = 1;
    }
    else {
    	$page = (int) $this->page;
    }
    Это что за магия? Что оно вообще делает? Что будет если единица ВНЕЗАПНО попадет в блок else??

    $start = ceil($count_m/$m_per_page);А теперь подумайте, как должна называться переменная, считающая общее количество страниц.

    суть в том, что когда формируется limit 72, 24, т.е 3 страница,
    Стоит пройти курс арифметики за 2 класс, и посчитать что 3 страница будет limit 48, 24.
    limit 24, 24 - вторая и limit 0, 24 - первая.
    Ответ написан
    1 комментарий
  • Как на OpenServer поставить MySQL выше 8.0?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Зависит ли скорость записи в БД от количества в ней записей?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?
    Из "промежуточной" можно извлечь только связи, она для этого и нужна.

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

    Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
    Какие - "такие"? У вас вообще ни одного запроса не написано.
    Ответ написан
    7 комментариев
  • Как не показывать пустые массивы?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) сделайте нормальные имена полям, что за rid, rname, ryavka, тут с большой буквы, там с маленькой... кроме того что половина полей транслитерацией кривой, так еще и префикс зачем то присобачили... С переменными та же фигня.
    2) База должна соответствовать 3 нормальной форме, соответственно 2 значения в поле вашей рявки быть не должно, это должны быть 2 отдельных поля (или вообще внешняя таблица, если там много значений предполагается).
    3) Соответственно в запросе нужно будет дать дополнительное условие по наличию второго поля, тогда ответ будет такой как надо.
    4) В вашем случае предполагаю что ответ вообще не приходит, или приходит пустой, так как при запросе из пустого результата в первой же итерации цикла все упадет как раз с описанной ошибкой.
    Ответ написан
    5 комментариев
  • Почему не записываются данные в MySQL базу данных?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - код, согласно правилам ресурса, должен быть представлен блоком кода, а не шакальным видео.
    Во вторых - перед всем вашим кодом добавляете
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    что позволяет вам (пострчно):
    1) отображать ошибки и предупреждения
    2) отлавливать ошибки и предупреждения
    3) выдавать ошибки запроса в бд через ошибки пхп

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

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

    Во вторых - научитесь отладке. Если вы не знаете в чем вообще проблема, стоит посмотреть что и на каком этапе пошло не так, для этого в самом примитивном виде нужно использовать var_dump/print_r, ну или инструменты по типу xdebug.

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

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Не сочтите за грубость, но вас из крайности в крайность бросает. То вы не хотели связываться с бд так как это "слишком сложно" и хранили все в файлах, измываясь и над собой и над ребятами которые все это пытались как-то образумить... Сейчас есть большой шаг вперед - вы подружились с бд, но теперь, как в той поговорке - если в руках молоток - все кажется гвоздем... Конфиги из нескольких переменных проще хранить в файле настроек, например в формате JSON. Если уж очень хочется забить шуруп молотком - заведите табличку сеттингс, храните в ней пары ключ-значение, или вообще одну строку с тем же JSON.
    Ответ написан
    2 комментария
  • Есть ли готовое решение для создания пользовательской панели на базе MySQL для управления заданиями клиентов?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Звучит как ларавель + рбак + что-то типа вояджера. По описанию в 10 строчек звучит как распространенная задача, на деле ВСЕГДА всплывает миллион нюансов и "мы думали это само собой разумеется", по этому 99,9% что подходящего готового решения "искаропки" под ваши хотелки нет.
    Ответ написан
    Комментировать
  • Как избежать повтора в запросах многие ко многим?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1280px-SQL_Joins.svg.png

    UPD:
    Ребят JOIN правильный, но так как у шаблона может быть несколько категорий, выборка идет с дублирующими "ЯЧЕЙКАМИ",
    в вопросе идет речь про повторы (по умолчанию строк). Из картинок нифига не понятно чего вам не хватает.
    Если нужно сделать строки уникальными по какому-либо полю, следует сгруппировать соответственно по этому полю, тогда эти строки "схлопнутся" до одной. Беда в том что тогда вы не будете знать какая категория попадет по умолчанию в результат запроса, и соответственно нужно либо использовать агрегирующие функции в списке полей, либо сортирующие. Как вариант можно использовать дистинкт на соответствующее поле.
    Ответ написан
    4 комментария
  • Как обновить блок после удаления и добавления и получить данные для редактирования?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Первое что надо сделать - нормальные запросы с подготовленными выражениями, а не дырявые инъекции...

    Второе - возвращать нормальные данные с понятным (машине) результатом операции, а не текстовый поток сознания. Для этого существует json, который обычно в подобных ситуациях содержит: Код ошибки, текст ошибки, и сообщение для вывода, где первое поле содержит цифру (обычно просто 1 в случае ошибки или 0 в случае успеха), второе поле является необязательным, но сильно облегчает дебаг, и третье - как раз может содержать ваше словесное описание.

    Далее, по результату выполнения операции на бэкенде, исходя из данных полученных обратно аяксом уже решаем что делать, если ошибка - ничего не трогаем, если ошибки нет - добавляем/удаляем строки в таблице. Удаление - банально что-то типа del_button.closest('tr').delete() (емнип). С добавлением сложнее, но в целом ничего особенного, можно засовывать в конец списка, так как не вижу там у вас никакой сортировки при выборке. Строку формируете либо в колбэке, либо можно возвращать готовую в дополнительном поле возвращаемого жсона, и уже оттуда только добавить готовую новую ноду внутрь таблицы.

    Так же, учитывая что новые элементы не будут работать при добавлении, так как на них не навешены слушатели, либо каждый раз перезапускать навешивание листенеров, либо нормально сделать делегирование для кнопки удаления.
    Ответ написан
    Комментировать
  • Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'ID' at row 1. Как решить ошибку?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Читаем текст ошибки
    2) В меру способностей переводим, в случае клинического английского пользуемся онлайн переводчиками.
    3) Сравниваем текст ошибки с реальной ситуацией в коде, находим 10 отличий от желаемого
    4) Чиним
    5) Профит, пиво, радость, дофамин...
    Подходит для всех ошибок, не только для этой конкретной...

    Так же рекомендуется:
    Проверять данные перед вставкой/апдейтом, например тупо проверив что пришло в $_GET/$_POST
    Использовать подготовленные выражения, так как сейчас у вас там дыра в безопасности (ну хоть что-то в безопасности)) )
    По возможности изучить стандарты нейминга и PSR в целом.

    ЗЫ: делать препэйр и при этом вставлять данные прям строкой - особый вид искусства...
    ЗЫ2:
    1) Видна попытка сделать нормальные подготовленные выражения, но так как учились плохо, то и получилось плохо... В цикле надо задать не значения из массива, а плейсхолдеры, после чего передать соответствующий массив.
    2) mb_strlen($Name, 'utf8') - кодировка называется UTF-8.
    Ответ написан
    Комментировать
  • Как лучше сделать историю покупок на MySQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    operation_type это тип операции. Списание или же начисление. От этого на фронте будет вырисовываться определённый текст. PLUS - начисление, SUB, списание, но как я уже и сказал это у меня вызывает вопросы. Ведь даже при списании будет начисление.
    Смысл? Правильнее добавлять минус при списании к стоимости покупки, тогда это поле вообще не понадобится, а сумма по транзакциям будет правильной. Ну и на фронте исходя из знака отображать что там нужно...

    list_purchase, конечно можно вынести в отдельную таблицу и я понимаю даже почему, но данное поле даже необязательное, оно как примечание. Стоит ли для неважный вещей создавать таблицу?
    Вообще странно, что у вас покупка состоит вроде бы из набора итемов, но они нигде не перечислены, кроме как в необязательном поле...

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

    И как бы Вы реализовали систему списания и начисления баллов? Наверное это самый главный вопрос
    Так а какая логика начислений? Надо добавить - делаем апдейт на нужную сумму, нужно списание - делаем апдейт на нужную разницу, в чем вопрос?

    Стоит ли делать зависимости? Чтобы сумма бонусов клиента зависела от таблицы покупок
    Может где то, в определённом источнике имеется свод информации, касаемо таких решений? Может где то, в определённом источнике имеется свод информации, касаемо таких решений?
    Это называется "нормальные формы". На практике вам будут нужны первая, вторая и третья нормальная форма (например хранение total_purchase нарушает 3 НФ, так как может быть вычислена из объединения с таблицей покупок).

    По наименованию полей: Вроде все более-менее норм, единственно что list_purchase и sum_purchase логичнее переставить - purchase_list и purchase_sum, хорошо же начинали с purchase_date, что пошло не так? )
    Ответ написан
    Комментировать
  • Увеличение записи на некоторое число по предыдущей записи?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Похоже что задача сводится к удалению всех айди и заполнения автоинкрементом с шагом 10.
    SET GLOBAL auto_increment_increment=10;
    SET GLOBAL auto_increment_offset=1;
    ALTER TABLE example DROP COLUMN id;
    ALTER TABLE example ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (id);
    Вообще задача странная, и попахивает очередным "гениальным" решением...
    Ответ написан
    1 комментарий
  • Не работает php код?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Логи смотри, ну или включи вывод ошибок.
    echo('Это имя пользователя уже занято.');
    header('Location: register.php'); // Возврат на форму регистрации
    Здесь стопудоф будет лажа, так как хеадер так не отправляется. Почему - учим матчасть. Собсно в логах это будет отражено.
    Ответ написан