АРМАДА
MySQL проблема или PHP-код неверный
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Чт Апр 02, 2009 9:49 amДобавить в избранноеОтветить с цитатой
короче столкнулся с серьезной проблемой, из-за которой соцсеть заглючила (а именно вывод статей).
суппорт движка (Explay CMS) сцуко морозится, делает вид будто он умер.
или типа он никого не хочет видеть и ни с кем не хочет разговаривать.
я в принципе и сам могу разобраться что почём и где подкрутить, нужна
только небольшая подсказка:

Код:
   // Формируем запрос на выбор списка статей
   //
   public function db_select_list ($options_str, $order, $start, $number) {
      $query_string = "SELECT SQL_CACHE
            art_id,
            art_header,
            art_category,
            art_body,
            art_publik,
            art_author,
            art_date,
            art_image,
            art_tags,
            art_community,
            art_rating,
            art_voters,
            auto_tag,
            art_visible,
            category.cat_header,
            users.user_name,
            users.user_login,
            comments.cnt_com,
            category.cat_header,
            category.cat_description,
            category.cat_voters,
            category.cat_rating,
            category.cat_id
         FROM ".DB_PEREFIX."_articles AS articles
         
            LEFT JOIN (
               SELECT
                  cat_id,
                  cat_name,
                  cat_header,
                  cat_description,
                  cat_rating,
                  cat_voters
               FROM ".DB_PEREFIX."_art_category
               
            ) AS category ON articles.art_category = category.cat_name
               
            LEFT JOIN (
               SELECT
                  user_id,
                  user_name,
                  user_login
               FROM ".DB_PEREFIX."_users
            ) AS users ON articles.art_author = users.user_id
            
            LEFT JOIN (
               SELECT
                  COUNT(*) AS cnt_com,
                  com_category,
                  com_idi
               FROM ".DB_PEREFIX."_comments WHERE com_category = 'articles' GROUP BY com_idi
            ) AS comments ON comments.com_idi = articles.art_id
         
         WHERE ".$options_str." ORDER BY ".$order." DESC LIMIT ".$start.", ".$number;
      
      //print $query_string;
      //exit;
      
      return $this->db->query ($query_string);
   }
   


вот в этом куске код что означает последняя строка:
Код:
      return $this->db->query ($query_string);


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

Код:
    * Строит список комментариев с дополнительными полями
    */
   public function build_advanced_articles_comments ($start, $after_url, $order = 'com_rating') {
      
      $db = MySQL::getInstance ();
      
      $query = $db->query ("SELECT SQL_CACHE comment.*, article.art_header, article.art_category, category.cat_header, usr.user_name, usr.user_login  FROM ".DB_PEREFIX."_comments AS comment
         LEFT JOIN (SELECT art_id, art_header, art_category FROM ".DB_PEREFIX."_articles) AS article ON comment.com_idi = article.art_id
         LEFT JOIN (SELECT cat_name, cat_header FROM ".DB_PEREFIX."_art_category) AS category ON category.cat_name = article.art_category
         LEFT JOIN (SELECT user_id, user_name, user_login FROM ".DB_PEREFIX."_users) AS usr ON usr.user_id = comment.com_uid
         WHERE ".$this->options_str." ORDER BY $order DESC LIMIT $start, 30");
      
      $count_ = $db->fetch_array ($db->query ("SELECT COUNT(com_id) AS cnt FROM ".DB_PEREFIX."_comments WHERE ".$this->options_str));
      $count = $count_['cnt'];
      
      if ($count == 0) {
         site_error ('Нет комментариев по заданным условиям!');
         return;
      }
      
      while ($com = $db->fetch_array ($query)) {
         $this->display_advanced_comment ($com);
      }   
            
      if ($count > 3) $this->data .= past_pages($start, 30, $count, '/top/comments/', 'page', $after_url);
      
      unset ($get, $db);

   }
   


вот в этом куске что означает
Код:
         WHERE ".$this->options_str." ORDER BY $order DESC LIMIT $start, 30");


???
и почему из-за этого ошибка возникает? лимит чего это? можно ли его поднять? и достаточно ли для этого цифру 30 изменить например на 50 или 70?

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Чт Апр 02, 2009 10:07 amОтветить с цитатой
в принципе проблему же могут помочь решить php-программисты? не обязательно же быть создателем движка.
он на php написан. что самое странное - в исходнике такой же код, без изменений,
на сайте его никто не правил. все время работал вывод статей отлично.
и вот только месяц назад начал подглюкивать, а теперь и вообще накрылся.
есть еще подозрения что это MySQL база не выдерживает обращений.
а значит пора сменить шаред хостинг на VDS. т.к. хостеры наверное лимиты ограничили.
может быть такое или нет? из изменений происходит только потихонечку увеличивающийся трафик.
больше на сайте особо ничего такого не меняется, ну посты постятся иногда (раз в 4-5 дней).
никто не мог повлиять на ошибку, но и она сама по себе не возникла же из ниоткуда.

creator123
Гуру
Зарегистрирован: 25.07.2007
Сообщений: 1145
Обратиться по нику
# Добавлено:Чт Апр 02, 2009 10:31 amОтветить с цитатой
да надо смотреть какую ошибку выдает запрос
return $this->db->query ($query_string);
это как раз запрос отсылается в mysql и там что-то идет не так.
<----- если понравился пост, жмакай сюды <-----

brantozawr
Опытный
Зарегистрирован: 10.11.2008
Сообщений: 126
Обратиться по нику
# Добавлено:Чт Апр 02, 2009 2:47 pmОтветить с цитатой
Цитата:

что это за строчка, для чего она нужна?



Запрос к MySQL и возврат результата... уберешь - тогда вообще ничего работать не будет Wink

Цитата:

вот в этом куске что означает

Код:
WHERE ".$this->options_str." ORDER BY $order DESC LIMIT $start, 30");

???
и почему из-за этого ошибка возникает? лимит чего это? можно ли его поднять? и достаточно ли для этого цифру 30 изменить например на 50 или 70?



Почему ты считаешь, что ошибка из-за этого? Думаю, это лимит вывода комментов к посту. Т.е. 30 комментов.

У тебя в первом коде есть строки

Код:

      //print $query_string;
      //exit;



Убери комментарией со строки "print $query_string;" и пришли результат вывода в случае, когда статья выводится одна и когда выводится список.

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Пт Апр 03, 2009 12:45 amОтветить с цитатой
creator123, brantozawr, спасибо. попробую разобраться с хостером.
мне кажется там урезали и ущемили лимиты.
потом попробую убрать комментарий, как подсказал brantozawr.
все-таки подозреваю что хостер решил мне затянуть гайки,
возможно придется переехать от него, все-таки виртуал шаред.
если не ответит суппорт хостера и не подтвердит догадку, то буду пробовать варианты решения проблемы.
а если все-таки ничего не поможет, тогда значит по-любому хостинг косячит и съехать придется.
блин, а трафа то всего не более 200 уников в сутки, а социалку уже не выдерживает виртуал.
а еще многие говорили что любая соц.CMS продержится с таким маленьким трафиком на любом виртуале.
Sad оказалось не так.

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Пт Апр 03, 2009 4:01 pmОтветить с цитатой
хостер взял ответственность на себя, признались что у них лимит на размер обращений к БД
всего 5 Мб и сказали что поднимут плану. скоро все рассосется и заработает. Wink

creator123
Гуру
Зарегистрирован: 25.07.2007
Сообщений: 1145
Обратиться по нику
# Добавлено:Пт Апр 03, 2009 4:22 pmОтветить с цитатой
можно проверить изменив
WHERE ".$options_str." ORDER BY ".$order." DESC LIMIT ".$start.", ".$number;
на
WHERE ".$options_str." ORDER BY ".$order." DESC LIMIT ".$start.", 1";
<----- если понравился пост, жмакай сюды <-----

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Сб Апр 04, 2009 10:08 pmОтветить с цитатой
все решилось. хостеры помогли. там среди админов есть рнр-программер.
здорово помог, внес по одной строчке в несколько рнр-файлов. так что теперь все гуд.
и вам всем спасибо за помощь! Drinks or Beer

creator123
Гуру
Зарегистрирован: 25.07.2007
Сообщений: 1145
Обратиться по нику
# Добавлено:Сб Апр 04, 2009 10:36 pmОтветить с цитатой
да... хороший хостер. А как его зовут, если не секрет?
<----- если понравился пост, жмакай сюды <-----

Hello_Kitty
V.I.P.
Зарегистрирован: 30.04.2007
Сообщений: 10763
Обратиться по нику
# Добавлено:Вс Апр 05, 2009 1:55 pmОтветить с цитатой
jino.ru
кстати это не первый хостер, который быстро отзывается и разруливает проблемы.
а то было время что тут на форуме часто хаяли ру-хостинги.
и я убедился что не перевелись еще на Руси добры-хостеры. Smile

а дело то вообще было и не в хостере, и не в лимите. 5 мб и так хватает.
дело было в самом скрипте. он там стопорился на этой фишке и спрашивал что делать.
ему надо было оказывается утвердить что все в порядке, прописав одну строчку в определенный файл.
и таких файлов, влияющих на ситуацию кардинально, как потом оказалось, несколько.
ну вот в принципе надо было всего лишь прописать по одной строчке в 4-5 файлов и все стало ОК.
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры