Posted 17 ноября, 20167 yr comment_116094 Всем привет. Как вы знаете, на форуме нет возможности пересчитать все сообщения в темах и пересчитать количество тем во всех разделах. Иногда, при некоторых манипуляциях, эти счетчики сбиваются и вернуть их в актуальное состояние - довольно трудоёмкий процесс. Единственное, что можно сделать через Админцентр, это пересчитать количество сообщений пользователя (или всех пользователей) и пересчитать их репутацию. Пошарив немного по интернету, я решил написать свой собственный php-скрипт и как всегда поделиться им с вами бесплатно. На данный момент скрипт умеет (v0.1 - 17.11.2016): Пересчитывать количество сообщений в каждой теме; Пересчитывать количество тем в каждом разделе; Пересчитывать количество сообщений у каждого пользователя (то, что можно сделать через админцентр); Отображает общее количество одобренных сообщений на форуме; Отображает общее количество утвержденных тем на форуме. Пересчитывать репутацию он не умеет, я пока не могу найти способа этого сделать, всё что удаётся извлечь из базы, это текущую репутацию. Сообщения и темы, находящиеся в архиве он тоже не считает. Установка: Скачайте файл restatic.php из этого сообщения в корень вашего сайта, настройте (указав параметры подключения к БД) и запустите в адресной строке браузера по пути: http://ваш_сайт.ru/restatic.php Процесс выполнения скрипта может занимать от пары секунд, до пары минут, в зависимости от объёма данных в вашей базе. Если файл во вложении больше недоступен, можете создать в корне сайта пустой файл restatic.php и скопировать туда следующее содержимое: Спойлер <!DOCTYPE html> <html> <head> <META content="text/html; charset=utf-8" http-equiv="Content-Type"> <title>ReStatic v0.1 (17 nov 2016) - [email protected]</title> </head> <body> <?php //Настройки подключения к вашей БД mysql_connect("****", "****", "****"); //хост_бд, имя_пользователя_бд, пароль_пользователя_бд mysql_select_db("****"); //имя_бд mysql_query ("set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); mysql_query ("SET NAMES utf8"); //Количество сообщений в каждой теме $sql1 = "UPDATE forums_topics LEFT JOIN ( SELECT topic_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY topic_id ) msg_cnt ON topic_id = forums_topics.tid SET posts = coalesce(messages_cnt, 0)"; $result1 = mysql_query($sql1) or die(mysql_error()); if ((isset($result1)) AND ($result1 != "")) { echo "<span style=\"color: green;\">Количество сообщений в каждой теме <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество сообщений в каждой теме <strong>не удалось</strong> пересчитать.</span><br />"; } //Количество тем в каждом разделе $sql2 = "UPDATE forums_forums LEFT JOIN ( SELECT forum_id, count(0) AS topics_cnt, sum(posts) AS msg_cnt FROM forums_topics WHERE approved=1 GROUP BY forum_id ) msg_cnt ON forum_id = forums_forums.id SET topics = coalesce(topics_cnt, 0), posts = coalesce(msg_cnt, 0)"; $result2 = mysql_query($sql2) or die(mysql_error()); if ((isset($result2)) AND ($result2 != "")) { echo "<span style=\"color: green;\">Количество тем в каждом разделе <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество тем в каждом разделе <strong>не удалось</strong> пересчитать.</span><br />"; } //Количество сообщений у каждого пользователя $sql3 = "UPDATE core_members LEFT JOIN ( SELECT author_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY author_id ) msg_cnt ON author_id = core_members.member_id SET member_posts = coalesce(messages_cnt, 0)"; $result3 = mysql_query($sql3) or die(mysql_error()); if ((isset($result3)) AND ($result3 != "")) { echo "<span style=\"color: green;\">Количество сообщений у каждого пользователя <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество сообщений каждого пользователя <strong>не удалось</strong> пересчитать.</span><br />"; } //Общее количество одобренных сообщений на форуме $sql3 = "SELECT COUNT(*) FROM `forums_posts` WHERE `queued` = '0'"; $request3 = mysql_query($sql3) or die(mysql_error()); $result3 = mysql_fetch_array($request3); $resultat3 = $result3[0]; if ((isset($result3)) AND ($result3 != "")) { echo "<span style=\"color: green;\">Общее количество одобренных сообщений на форуме: <strong>" . $resultat3 . "</strong>.</span><br />"; } else { echo "<span style=\"color: red;\">общее количество сообщений одобренных на форуме <strong>не удалось</strong> посчитать.</span><br />"; } //Общее количество утвержденных тем на форуме $sql4 = "SELECT COUNT(*) FROM `forums_topics` WHERE `approved` = '1'"; $request4 = mysql_query($sql4) or die(mysql_error()); $result4 = mysql_fetch_array($request4); $resultat4 = $result4[0]; if ((isset($result4)) AND ($result4 != "")) { echo "<span style=\"color: green;\">Общее количество утвержденных тем на форуме: <strong>" . $resultat4 . "</strong>.</span><br />"; } else { echo "<span style=\"color: red;\">Количество утвержденных тем на форуме <strong>не удалось</strong> посчитать.</span><br />"; } ?> </body> </html> Если файл будет полезен, пишите. Возможно в будущем будет обновляться. Всем спасибо за внимание. Возможно вам также будут интересны другие мои темы: restatic.php Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/ Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116098 Только вчера искал как можно пересчитать количество сообщений т.к. при перемещении сообщения в категории выводилось больше, чем реально есть. Не нашел и просто залез в SQL и поправил ручками Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116098 Share on other sites Больше вариантов
17 ноября, 20167 yr Author comment_116101 rsergio, можно конечно и так, если форум не слишком большой. Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116101 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116113 Не работает - указав параметры подключения к БД Fatal error: Uncaught Error: Call to undefined function mysql_connec() in /......./......./......../restatic.php:10 Stack trace: #0 {main} thrown in /......./......../........../restatic.php on line 10 Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116113 Share on other sites Больше вариантов
17 ноября, 20167 yr Author comment_116116 А версия какая? Попробуй вместо mysql написать mysqli Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116116 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116117 На localhost работает .... но на реалний форум нет ..... Попробул вместо mysql написать mysqli - но ошибка ест Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116117 Share on other sites Больше вариантов
17 ноября, 20167 yr Author comment_116118 И почему mysql_connec() вместо mysql_connect() ? Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116118 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116119 нет .... Edited 17 ноября, 20167 yr by Silence Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116119 Share on other sites Больше вариантов
17 ноября, 20167 yr Author comment_116120 Только что, Silence сказал: ааааааааааа ...... ето вашая ошибка .... У меня все нормально. Возможно, когда данные вносил, лишнего стер? Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116120 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116121 Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /---/---/---/restatic.php:10 Stack trace: #0 {main} thrown in /---/---/---/restatic.php on line 10 Мой код: Спойлер <!DOCTYPE html> <html> <head> <META content="text/html; charset=utf-8" http-equiv="Content-Type"> <title>ReStatic v0.1 (17 nov 2016) - [email protected]</title> </head> <body> <?php //Настройки подключения к вашей БД mysql_connect("--------", "--------", "-------"); //хост_бд, имя_пользователя_бд, пароль_пользователя_бд mysql_select_db("------"); //имя_бд mysql_query ("set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); mysql_query ("SET NAMES utf8"); //Количество сообщений в каждой теме $sql1 = "UPDATE forums_topics LEFT JOIN ( SELECT topic_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY topic_id ) msg_cnt ON topic_id = forums_topics.tid SET posts = coalesce(messages_cnt, 0)"; $result1 = mysql_query($sql1) or die(mysql_error()); if ((isset($result1)) AND ($result1 != "")) { echo "<span style=\"color: green;\">Количество сообщений в каждой теме <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество сообщений в каждой теме <strong>не удалось</strong> пересчитать.</span><br />"; } //Количество тем в каждом разделе $sql2 = "UPDATE forums_forums LEFT JOIN ( SELECT forum_id, count(0) AS topics_cnt, sum(posts) AS msg_cnt FROM forums_topics WHERE approved=1 GROUP BY forum_id ) msg_cnt ON forum_id = forums_forums.id SET topics = coalesce(topics_cnt, 0), posts = coalesce(msg_cnt, 0)"; $result2 = mysql_query($sql2) or die(mysql_error()); if ((isset($result2)) AND ($result2 != "")) { echo "<span style=\"color: green;\">Количество тем в каждом разделе <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество тем в каждом разделе <strong>не удалось</strong> пересчитать.</span><br />"; } //Количество сообщений у каждого пользователя $sql3 = "UPDATE core_members LEFT JOIN ( SELECT author_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY author_id ) msg_cnt ON author_id = core_members.member_id SET member_posts = coalesce(messages_cnt, 0)"; $result3 = mysql_query($sql3) or die(mysql_error()); if ((isset($result3)) AND ($result3 != "")) { echo "<span style=\"color: green;\">Количество сообщений у каждого пользователя <strong>успешно</strong> пересчитано.</span><br />"; } else { echo "<span style=\"color: red;\">Количество сообщений каждого пользователя <strong>не удалось</strong> пересчитать.</span><br />"; } //Общее количество одобренных сообщений на форуме $sql3 = "SELECT COUNT(*) FROM `forums_posts` WHERE `queued` = '0'"; $request3 = mysql_query($sql3) or die(mysql_error()); $result3 = mysql_fetch_array($request3); $resultat3 = $result3[0]; if ((isset($result3)) AND ($result3 != "")) { echo "<span style=\"color: green;\">Общее количество одобренных сообщений на форуме: <strong>" . $resultat3 . "</strong>.</span><br />"; } else { echo "<span style=\"color: red;\">общее количество сообщений одобренных на форуме <strong>не удалось</strong> посчитать.</span><br />"; } //Общее количество утвержденных тем на форуме $sql4 = "SELECT COUNT(*) FROM `forums_topics` WHERE `approved` = '1'"; $request4 = mysql_query($sql4) or die(mysql_error()); $result4 = mysql_fetch_array($request4); $resultat4 = $result4[0]; if ((isset($result4)) AND ($result4 != "")) { echo "<span style=\"color: green;\">Общее количество утвержденных тем на форуме: <strong>" . $resultat4 . "</strong>.</span><br />"; } else { echo "<span style=\"color: red;\">Количество утвержденных тем на форуме <strong>не удалось</strong> посчитать.</span><br />"; } ?> </body> </html> Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116121 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116122 Можно опубликовать запросы Mysql с комментариями здесь на форуме, чтобы их можно было выполнить через phpmyadmin. Тогда не нужно будет никакие файлы загружать на сервер. Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116122 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116123 mysql_ * функции были удалены в PHP7 Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116123 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116133 12 часов назад, Heavenanvil сказал: На данный момент скрипт умеет (v0.1 - 17.11.2016): Пересчитывать количество сообщений в каждой теме; Пересчитывать количество тем в каждом разделе; Пересчитывать количество сообщений у каждого пользователя (то, что можно сделать через админцентр); Скрипт для phpmyadmin, взятый из приведенного выше php-кода. Делает тоже самое. Инструкция: Войдите в phpmyadmin, откройте базу данных форума, во вкладку SQL вставьте приведенный скрипт для обновления статистики форума. Если у вас установлен sql_tbl_prefix, то вам нужно будет добавить его в приведенные запросы. Внимание! Все действия с базой данных необратимы, вы выполняете их на свой страх и риск. -- Количество сообщений в каждой теме UPDATE forums_topics LEFT JOIN ( SELECT topic_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY topic_id ) msg_cnt ON topic_id = forums_topics.tid SET posts = coalesce(messages_cnt, 0); -- Количество тем в каждом разделе UPDATE forums_forums LEFT JOIN ( SELECT forum_id, count(0) AS topics_cnt, sum(posts) AS msg_cnt FROM forums_topics WHERE approved=1 GROUP BY forum_id ) msg_cnt ON forum_id = forums_forums.id SET topics = coalesce(topics_cnt, 0), posts = coalesce(msg_cnt, 0); -- Количество сообщений у каждого пользователя UPDATE core_members LEFT JOIN ( SELECT author_id, count(0) AS messages_cnt FROM forums_posts WHERE queued=0 GROUP BY author_id ) msg_cnt ON author_id = core_members.member_id SET member_posts = coalesce(messages_cnt, 0); Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116133 Share on other sites Больше вариантов
17 ноября, 20167 yr comment_116136 50 минут назад, ram108 сказал: -- Количество сообщений у каждого пользователя После этого запроса у меня в профайле количество сообщений увеличилось практически в 2 раза! Скорее всего скрипт не учитывает, что в некоторых разделах может стоять запрет на увеличение счетчика сообщений. У нас на форуме закрытый административный раздел, где общается команда. Сообщения в этом разделе не обновляют счетчик сообщений. Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116136 Share on other sites Больше вариантов
18 ноября, 20167 yr Author comment_116146 5 часов назад, ram108 сказал: Скрипт для phpmyadmin, взятый из приведенного выше php-кода. Делает тоже самое. Конечно. Вы просто выполняете его напрямую, без использования php и подключения к бд. 4 часа назад, ram108 сказал: После этого запроса у меня в профайле количество сообщений увеличилось практически в 2 раза! Скорее всего скрипт не учитывает, что в некоторых разделах может стоять запрет на увеличение счетчика сообщений. У нас на форуме закрытый административный раздел, где общается команда. Сообщения в этом разделе не обновляют счетчик сообщений. Да, это верно. Я подозревал, что не учел некоторых показателей при пересчете, например, как я уже говорил, не считает архив. Возможно доработаю скрипт. Чтобы вернуть актуальный счетчик сообщений пользователей, пока можете воспользоваться стандартными способами перерасчета. Link to comment https://ipbmafia.ru/topic/15808-pereschityvaem-vsyu-statistiku-foruma-restaticphp/?&do=findComment&comment=116146 Share on other sites Больше вариантов
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.