Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
avtobus

Пересчет тем и сообщений в IPS 4

Recommended Posts

Вечер в хату!

Уважаемые, подскажите как переcчитать количество сообщений у тем и пользователей? Я тут ковырялся в бд и видимо кривыми руками сбросил статистику сообщений у всех пользователей, подскажите добрые люди если не сложно как перестроить статистику sql запросом? Будут признателен за вашу помощь.

 

ПС.

Нашел старые запросы для тройки, но они не подходят для 4.x

Share this post


Link to post
Share on other sites

Пересчет сообщений пользователей:

 

UPDATE core_members m 
LEFT JOIN ( SELECT author_id, COUNT(*) as posts FROM forums_posts WHERE queued=0 GROUP BY author_id ) z ON m.member_id=z.author_id 
SET m.member_posts=IFNULL(z.posts, 0);

Пересчет сообщений в темах:

 

UPDATE forums_topics t 
LEFT JOIN( SELECT topic_id, COUNT(*) as posts FROM forums_posts WHERE queued=0 GROUP BY topic_id ) z ON z.topic_id=t.tid 
SET t.posts=IFNULL(z.posts, 0);

Пересчет тем и сообщений в форумах:

 

UPDATE forums_forums f 
LEFT JOIN ( SELECT forum_id, COUNT(*) as topics, SUM(posts) as posts FROM forums_topics GROUP BY forum_id ) z ON z.forum_id=f.id 
SET f.topics=IFNULL(z.topics, 0), f.posts=IFNULL(z.posts, 0);

  • Upvote 1

Share this post


Link to post
Share on other sites

Нужна помощь ребят!

Не работает эти SQL а именно, пересчет пользователей и пересчет сообщений в темах!

Edited by tunofak

Share this post


Link to post
Share on other sites

пересчет пользователей

Где Вы прочитали об этом? Нет запроса для пересчета юзеров.

 

Если речь идет о первом запросе, то в 4-ке есть инструмент для этого http://ipbskins.ru/forum/topic15749.html/page__view__findpost__p__105422

 

и пересчет сообщений в темах!
Как определили? Запрос рабочий.

Share this post


Link to post
Share on other sites

Я имел ввиду пересчет сообщений пользователя)

 

Возможно проблема у хостинга, пишет ошибку, при выполнении запроса

#1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay

Решается изменением строки max_join_size в конфиге. По стандарту она у меня стоит на max_join_size 2000000 А нужно поставить на милиард или более. Попробовал командой SET GLOBAL max_join_size=1844674407315; Выходит ошибка #1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation - У меня нету супер привелегий, посмотрел в панели хостинга, все права которые должны быть у меня есть. Получается суперправа может выдать или хостинг или вручную сам поменять конфиг.

Edited by tunofak

Share this post


Link to post
Share on other sites

В общем проблему понял.

Нужно поделить частями эти SQL запросы, чтобы не было большого запроса сразу в MySQL.

как в АЦ на версии 3.х.х Можно выбрать, по сколько строк обновлять за 1 запрос.

 

А также пересчет не совсем правильный идет.

У меня сообщения распределяются по времени, а не по ID

А в темах, последнее сообщение выбирает, сообщение по последнему ID.

У меня темы многие они связанны и там уже по времени расставлены сообщения.

Поэтому в последнее сообщение выходят сообщения, которые не являются последним по времени, они последние по ID

Edited by tunofak

Share this post


Link to post
Share on other sites

Нужно поделить частями эти SQL запросы, чтобы не было большого запроса сразу в MySQL.

как в АЦ на версии 3.х.х Можно выбрать, по сколько строк обновлять за 1 запрос.

Я же ссылку дал на пост, где есть скрин с указанием инструмента.

 

А также пересчет не совсем правильный идет.

У меня сообщения распределяются по времени, а не по ID

В запросах не обновляются данные о последних постах.

В 1-ом запросе обновляется кол-во контента юзеров

Во 2-ом запросе - кол-во постов в темах

В 3-м запросе - кол-во тем и постов в форумах

Share this post


Link to post
Share on other sites

Про инструмент я знаю :)

 

Мне нужно, чтобы в форумах и темах, обновлялась последнее сообщение.

Делом в том, что я меняю даты/открываю скрытые сообщения, через запросы в MySQL

Я на 3.4.6 делал пересчет тем/форумов и у меня обновлялись информация о последнем сообщении в форумах и темах.

Информация указывается такая - ID автора, Имя автора, уменьшенный аватар автора, ID страницы в теме(последняя должна быть), дата темы. Все кликабельно.

 

1193896be2c3.jpg

Share this post


Link to post
Share on other sites

Нажмите на скрыть пост, а после показать. При скрытии/показе поста обновляется статистика

Share this post


Link to post
Share on other sites

Да знаю :)

Дело в том, что я подумал как сделать отложенную публикацию Тем/Сообщений.

Смысл работы Отложенной публикации в том, что подготовленные темы/сообщения, переносятся в будущее на дни и месяцы.

Далее все темы/сообщения от СЕЙЧАС скрываются. Вот таким SQL запросом:

UPDATE `forums_posts`
SET `queued` = -1
WHERE `post_date` > UNIX_TIMESTAMP();

UPDATE `forums_topics`
SET `approved` = 0 
WHERE `start_date` > UNIX_TIMESTAMP();

 

Внимание! При таком запросе удаленные сообщения, могу перейти в скрытые. Поэтому удаляю сообщения которые находятся в удаленных, вот таким запросом:

DELETE FROM `forums_posts`
WHERE `queued` = -2;

DELETE FROM `forums_topics`
WHERE `approved` = -2;

 

И чтобы отложенные публикации действовали, я выполняю запрос SQL:

UPDATE `forums_posts`
SET `queued` = 0
WHERE `post_date` < UNIX_TIMESTAMP();

UPDATE `forums_topics`
SET `approved` = 1 
WHERE `start_date` < UNIX_TIMESTAMP();

Данный SQL запрос можно выполнять каждый день/час/минуту и у тебя будут выводится сообщения из скрытых.

 

Система такая работает! Но вот каждый пост вручную открывать/скрывать, это тяжело.

 

Может кто поможет, даже за $ сделать такой запрос? Можете потом оформить тему или создать хук, но хук стоящий.

Share this post


Link to post
Share on other sites

Я имел ввиду пересчет сообщений пользователя)

 

Возможно проблема у хостинга, пишет ошибку, при выполнении запроса

#1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay

У вас слишком большое количество пользователей или сообщений. В этом случае обновление статистики лучше сделать по частям из скрипта.

Share this post


Link to post
Share on other sites

Да знаю

Дело в том, что я подумал как сделать отложенную публикацию Тем/Сообщений.

Смысл работы Отложенной публикации в том, что подготовленные темы/сообщения, переносятся в будущее на дни и месяцы.

 

Тогда вам проще обновить статистику только тех форумов которых данные запросы касаются. Прежде чем выполнять update таблиц, сделайте запрос на select с аналогичными условиями и смотрите кого и сколько записей соответсвует запросу. Обновлять каждый час всю статистику выше приведенными запросами на большом форуме слишком накладно. И сам форум никогда таким образом стату не обновляет. Эти запросы создавались для быстрого и одноразового использования где производились ручные манипуляции с бд.

Share this post


Link to post
Share on other sites

Помогите с запросом SQL.

Я запросы в SQL пишу чуть по другому, через галочки.

Поэтому совместить эти запросы через SELECT не много не понятно будет, особенно я не понимаю forums_topics t , тут стоит ровно или просто пробел.

В общем, мне нужно сделать пересчет тем, при условии `forums_topics`.`posts` > 1 (Темы в которых больше одного сообщения, уменьшает список) И разделить их на части, на форуме 80000 тем, есть темы которые будут публиковаться допустим через месяц/год и в них же идет обсуждение. Получается выбирать конкретные темы, будет тяжело, в день публикуется по 10-30 тем и в них же, опять будут публиковаться сообщения.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Статистика Темы берется из последнего сообщения, последнее сообщение за 2020 год.

Сообщения и Темы до СЕГОДНЯ скрываются, Статистика как осталась за 2020 год так и будет, пока пересчет тем/сообщений не сделаешь.

Вручную все темы поправил Скрыть/открыть.

Потом опять открываешь скрытые темы до СЕГОДНЯ (130 сообщений и 30 тем за 1 день) а статистика темы остается старой.

Поэтому и нужно Обновление статистики.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...