Ответы пользователя по тегу MySQL
  • Почему не работает код в задаче гостевая книга на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По порядку:
    Браузер выдает следующую ошибку:
    Во первых не браузер, а сервер, а браузер ее только отображает. Во вторых это уведомление и предупреждение, а не ошибка.
    Далее, если ваш $view->assign('persons', $data); работает верно - значит в индексе ДО этого места в дата ничего нет. Что легко проверить с помощью вар_дамп. И если там не пусто - что-то в вашем вью работает криво, или не так как вы предполагаете, читайте документацию к данному методу.
    Ответ написан
    4 комментария
  • Как правильно составить SQL-запрос?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    джоин выданные книжки с книжками и с авторами и сум(авторс.ид) груп бай авторс.ид
    Ответ написан
    Комментировать
  • В чем проблема: Fatal error: Uncaught Error: Call to undefined function mysqli_connect() PHP8?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    https://www.php.net/manual/ru/function.get-loaded-...
    https://www.php.net/manual/ru/function.phpinfo.php
    в случае апача - рестарт апача. В случае php fpm - перезапустить пых.
    Ответ написан
    3 комментария
  • Как правильно составить sql запрос?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Зачем такие сложные телодвижения? Не проще при показе поста сразу добавлять ему просмотр?
    2) Нахрена такая... странная денормализованная система, где данные хранятся в 3(!) местах? Есть какой-то особый смысл хранить их в разных местах и содержать полностью неконсистентное состояние в любой момент времени?
    Ответ написан
  • Как правильно составить sql запрос?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Либо такой же мониторинг по HTTP-запросам, чтобы видеть куда чаще обращения идут.
    Ээээ... access.log, не?

    как вариант, но в идеале мониторить какие сейчас запросы происходят в консоли.
    Precona, но там надо курить маны, но можно настроить на мониторинг топ загружающих запросов и все вот это, со статистикой, графиками етц...
    Ответ написан
    1 комментарий
  • Как ускорить поиск в Joomla?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Сложил поаккуратнее
    SELECT  
      CASE WHEN LOWER(a.title) LIKE LOWER('%слово%') 
      THEN 5 ELSE 0 END  +  
      CASE WHEN LOWER(a.title) LIKE LOWER('%поиска%') 
      THEN 5 ELSE 0 END  AS relevance,
       a.title AS title, 
       a.metadesc, 
       a.metakey, 
       a.created AS created, 
       a.language, 
       a.catid, 
       CONCAT(a.introtext,a.fulltext) AS text,
       c.title AS section,  
      CASE WHEN CHAR_LENGTH(a.alias) != 0 
               THEN CONCAT_WS(':', a.id, a.alias) 
               ELSE a.id END as slug, 
      CASE WHEN CHAR_LENGTH(c.alias) != 0 
                THEN CONCAT_WS(':', c.id, c.alias) 
                ELSE c.id END as catslug, 
                '2' AS browsernav
      FROM db_content AS a
      INNER JOIN db_categories AS c 
      ON c.id=a.catid
      WHERE ((LOWER(a.title) LIKE LOWER('%слово%') 
      OR LOWER(a.introtext) LIKE LOWER('%слово%') 
      OR LOWER(a.fulltext) LIKE LOWER('%слово%') 
      OR LOWER(a.metakey) LIKE LOWER('%слово%') 
      OR LOWER(a.metadesc) LIKE LOWER('%слово%')) 
      AND (LOWER(a.title) LIKE LOWER('%поиска%') 
      OR LOWER(a.introtext) LIKE LOWER('%поиска%') 
      OR LOWER(a.fulltext) LIKE LOWER('%поиска%') 
      OR LOWER(a.metakey) LIKE LOWER('%поиска%') 
      OR LOWER(a.metadesc) LIKE LOWER('%поиска%'))) 
      AND a.state=1 
      AND c.published = 1 
      AND a.access IN (1,1,2,3,6) 
      AND c.access IN (1,1,2,3,6)
      AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2021-06-08 16:24:40') 
      AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2021-06-08 16:24:40')
      GROUP BY a.id, a.title, a.metadesc, a.metakey, a.created, a.language, a.catid, a.introtext, a.fulltext, c.title, a.alias, c.alias, c.id
      ORDER BY  relevance DESC, a.created DESC 
      LIMIT 20


    В такой каше и разобраться то сложно, тем более без таблиц, а что-то советовать - вообще хз...

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

    Ну и гроуп бай по куче полей тоже так себе затея...

    Похоже что что-то пошло не так или на этапе проектирования хранилища, или такова сама по себе жумла...

    В любом случае - можно отсекать куски запроса, выясняя где у вас основной затык, а уже после этого смотреть что и где крутить.
    Ответ написан
  • Обрезает фото при выгрузке с бд. Как исправить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    0) Хранить картинки в бд - надо себя очень не любить...
    1) Все просто дырявое как дуршлаг, инъекции на инъекциях...
    2) Размер поля под картинку наверняка коротковат, и вполне возможно даже не блоб. Отсюда и проблема - картинка тупо не вмещается в поле целиком.
    Ответ написан
    Комментировать
  • Как записать дату в таблицу MySql и в чём может быть проблема?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    prepared statements
    prepared statements
    prepared statements
    prepared statements
    Ответ написан
    3 комментария
  • Как исправить ошибку MySQL "Fatal error...?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Когда ты НЕ ЗНАЕШЬ что происходит у тебя в коде, во первых надо понять что и зачем ты пишешь, иначе это обезьянье тыканье в клавиатуру ни к чему не приведет в обозримом будущем. Прогресса не будет.
    Во первых - запросы выделить отдельно в переменные.
    Во вторых - вместо тупого "вставляния" переменных в запрос использовать плейсхолдеры, иначе будете страдать, и за дело. Разве так сложно все нужные параметры записать в массив ключ-значение и передать в запрос???
    В третьих - читать ошибки, понимать синтаксис. В идеале - нормально расписывать запрос в коде. Хотя я рекомендую всегда его писать в принятом построчном формате, это всегда удобно и наглядно:
    $sql = "
    INSERT INTO `cards` 
    (`name`, `title`, `p`, `tel`,`email`, `money`, `subject`) 
    VALUES 
    (:name,  :title,  :p,  :tel,  :email,   :money,  :subject";
    Надеюсь ошибка видна?
    Ответ написан
    Комментировать
  • Как отобразить две строки в одну?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    distinct + concat, правда полей будет только 2
    Ответ написан
    Комментировать
  • Как правильно вытащить из двух таблиц mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    таблица guests - whoinvited должен хранить id приглашающего, тогда можно сделать джоин по этим таблицам по ид и хуинвайтед, но в любом случае - в одной строке вы не получите ВСЕХ приглашенных отдельными полями, либо это будут строки дублирующиеся по таблице юзерс и отличающиеся только по инвайтед, либо можно сделать груп бай хуинвайтед и конкат на гестнэйм, и будет 1 поле со строковым значением всех имен.
    Ответ написан
  • Как разделить вывод у разных пользователей в php и MySql?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вопрос вообще типа "как тут ехать?".
    Создаёт пользователь ключ: licensekey(Пример ключа, не таблицы), и нужно сделать так, чтобы другие пользователи не видели этого ключа
    Не показывай им его.

    А админ мог все ключи видеть.
    А админу показывай.

    Такое возможно в php?
    Ну, возможно что возможно... пока все еще не очень понятно что тебе нужно...

    Т.к я начинающий, я ещё не знаю как это реализовать(
    Что "это"?
    Ответ написан
  • Как ускорить работу скрипта?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1)
    $stmt = $mysql->query("SELECT `value` FROM counter WHERE `id` = 1");
       $data = (int)$stmt->fetchColumn();
       $data++;
       $query = "UPDATE `counter` SET `value` = :value WHERE `id` = :id";
       $params = [
         ":id" => 1,
         ":value" => $data
       ];
    меняем на
    $query = "UPDATE `counter` SET `value` = `value`+1 WHERE `id` = :id";
    и сразу избавляемся от лишнего запроса. На будущее переписываем как инсерт он дупликэйт апдейт.
    2) dataType: 'text',меняем на dataType: 'json', и никакие парсе не нужно, получаем сразу объект.
    3) Смотрим вкладку нетворк, строчку где выполнился аякс, смотрим ОТВЕТ СЕРВЕРА. Много думаем.
    Ответ написан
  • В чём ошибка в коде?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых нахрена было давать полю автоинкремент если вы его руками будете вставлять? Это не к тому чтобы убрать автоинкремент, это к тому что это поле в запросе указывать вообще не надо.

    Во вторых - у таблицы которую вы уже использовали, наверняка уже существовал id=2, и она это "помнит", то что вы не можете создать такой ключ который уже использовался гарантирует консистентность данных.

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Чтобы не углубляться и не расписывать свою задачу со всеми деталями которые не имеют отношения к вопросу,
    Лучше бы вы задачу расписали, из вашего решения ни цель, ни проблема не видны. Вообще вопрос скорее всего возник из непонимания процесса работы в целом, что можно было бы решить 2 словами.

    Как реализовать так, чтобы пользователь не получал ошибку, а просто ждал ответа от сервера.
    Какой ответ? Нужно посчитать и отдать результат или достаточно чтобы ответ был "все ок"?

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

    Можно ли на сервере с такими данными реализовать эту задачу чтобы сервер и СУБД не отваливались?
    Вообще не вижу проблем, Даже если 100 человек одновременно кликнет - особой беды не будет. Во первых, на каждого будет выделен отдельный трит пхп, во вторых - такие мелкие записи вообще ниачем, мускуль их может херачить сотнями в секунду.

    В целом: Решение с транзакциями вообще спорное, и не понятно зачем здесь воткнуто (интересно ваше решение - откудо оно и зачем? И в догонку - почему они так редко используются, а в вашем случае "очень нужны"?).

    Как можно это синтетически протестировать?
    apache jmeter или yandex tank.

    Вывод
    Скорее всего переживания ваши ниачем, но если вы по секрету расскажете нам что за уникальную вундервафлю вы строите, возможно ответ будет точнее и осмысленнее.
    Ответ написан
    3 комментария
  • Как сделать сортировку таблицы mysql?

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

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Не надо спорить, для ФИНАНСОВЫХ операций только дечимал. Если вы не в курсе или не занимались этим - не надо давать плохих советов. В некоторых бд есть специальный вид MONEY, но он не всегда подходит, так как имеет обычно ограниченное количество знаков после запятой, как в данном случае, биткоин или операции с большим "хвостом" как на форексе.

    UPD: Надеюсь никому не надо объяснять почему флоат не подходит?
    Ответ написан
    Комментировать