avtobus 6 11/17/2016 06:29 PM Вечер в хату!Уважаемые, подскажите как переcчитать количество сообщений у тем и пользователей? Я тут ковырялся в бд и видимо кривыми руками сбросил статистику сообщений у всех пользователей, подскажите добрые люди если не сложно как перестроить статистику sql запросом? Будут признателен за вашу помощь. ПС.Нашел старые запросы для тройки, но они не подходят для 4.x Share this post Link to post Share on other sites
siv1987 2,623 11/17/2016 07:28 PM Пересчет сообщений пользователей: 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); 1 Share this post Link to post Share on other sites
tunofak 0 11/17/2018 09:59 PM (edited) Нужна помощь ребят!Не работает эти SQL а именно, пересчет пользователей и пересчет сообщений в темах! Edited November 17, 2018 by tunofak Share this post Link to post Share on other sites
newbie 1,721 11/18/2018 08:48 AM пересчет пользователей Где Вы прочитали об этом? Нет запроса для пересчета юзеров. Если речь идет о первом запросе, то в 4-ке есть инструмент для этого http://ipbskins.ru/forum/topic15749.html/page__view__findpost__p__105422 и пересчет сообщений в темах! Как определили? Запрос рабочий. Share this post Link to post Share on other sites
tunofak 0 11/19/2018 04:44 AM (edited) Я имел ввиду пересчет сообщений пользователя) Возможно проблема у хостинга, пишет ошибку, при выполнении запроса#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 November 19, 2018 by tunofak Share this post Link to post Share on other sites
tunofak 0 11/19/2018 07:44 AM (edited) В общем проблему понял.Нужно поделить частями эти SQL запросы, чтобы не было большого запроса сразу в MySQL.как в АЦ на версии 3.х.х Можно выбрать, по сколько строк обновлять за 1 запрос. А также пересчет не совсем правильный идет.У меня сообщения распределяются по времени, а не по IDА в темах, последнее сообщение выбирает, сообщение по последнему ID.У меня темы многие они связанны и там уже по времени расставлены сообщения.Поэтому в последнее сообщение выходят сообщения, которые не являются последним по времени, они последние по ID Edited November 19, 2018 by tunofak Share this post Link to post Share on other sites
newbie 1,721 11/19/2018 09:11 AM Нужно поделить частями эти SQL запросы, чтобы не было большого запроса сразу в MySQL.как в АЦ на версии 3.х.х Можно выбрать, по сколько строк обновлять за 1 запрос.Я же ссылку дал на пост, где есть скрин с указанием инструмента. А также пересчет не совсем правильный идет.У меня сообщения распределяются по времени, а не по IDВ запросах не обновляются данные о последних постах.В 1-ом запросе обновляется кол-во контента юзеровВо 2-ом запросе - кол-во постов в темахВ 3-м запросе - кол-во тем и постов в форумах Share this post Link to post Share on other sites
tunofak 0 11/20/2018 06:40 AM Про инструмент я знаю :) Мне нужно, чтобы в форумах и темах, обновлялась последнее сообщение.Делом в том, что я меняю даты/открываю скрытые сообщения, через запросы в MySQLЯ на 3.4.6 делал пересчет тем/форумов и у меня обновлялись информация о последнем сообщении в форумах и темах. Информация указывается такая - ID автора, Имя автора, уменьшенный аватар автора, ID страницы в теме(последняя должна быть), дата темы. Все кликабельно. Share this post Link to post Share on other sites
newbie 1,721 11/20/2018 07:05 AM Нажмите на скрыть пост, а после показать. При скрытии/показе поста обновляется статистика Share this post Link to post Share on other sites
tunofak 0 11/20/2018 07:46 AM Да знаю :)Дело в том, что я подумал как сделать отложенную публикацию Тем/Сообщений.Смысл работы Отложенной публикации в том, что подготовленные темы/сообщения, переносятся в будущее на дни и месяцы.Далее все темы/сообщения от СЕЙЧАС скрываются. Вот таким 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
siv1987 2,623 11/20/2018 12:22 PM Я имел ввиду пересчет сообщений пользователя) Возможно проблема у хостинга, пишет ошибку, при выполнении запроса#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
siv1987 2,623 11/20/2018 01:04 PM Да знаю Дело в том, что я подумал как сделать отложенную публикацию Тем/Сообщений.Смысл работы Отложенной публикации в том, что подготовленные темы/сообщения, переносятся в будущее на дни и месяцы. Тогда вам проще обновить статистику только тех форумов которых данные запросы касаются. Прежде чем выполнять update таблиц, сделайте запрос на select с аналогичными условиями и смотрите кого и сколько записей соответсвует запросу. Обновлять каждый час всю статистику выше приведенными запросами на большом форуме слишком накладно. И сам форум никогда таким образом стату не обновляет. Эти запросы создавались для быстрого и одноразового использования где производились ручные манипуляции с бд. Share this post Link to post Share on other sites
tunofak 0 11/20/2018 02:17 PM Помогите с запросом SQL.Я запросы в SQL пишу чуть по другому, через галочки.Поэтому совместить эти запросы через SELECT не много не понятно будет, особенно я не понимаю forums_topics t , тут стоит ровно или просто пробел.В общем, мне нужно сделать пересчет тем, при условии `forums_topics`.`posts` > 1 (Темы в которых больше одного сообщения, уменьшает список) И разделить их на части, на форуме 80000 тем, есть темы которые будут публиковаться допустим через месяц/год и в них же идет обсуждение. Получается выбирать конкретные темы, будет тяжело, в день публикуется по 10-30 тем и в них же, опять будут публиковаться сообщения. Share this post Link to post Share on other sites
siv1987 2,623 11/20/2018 03:22 PM Честно говоря не понимаю из-за чего столько возни. Если эти темы существуют на форуме какой смысл пересчитывать статистику, пусть даже они и будут опубликованы через год. Не удаляйте темы форума запросами, пусть это форум сделает сам, тогда ничего пересчитывать не придется. Share this post Link to post Share on other sites
tunofak 0 11/20/2018 04:45 PM Статистика Темы берется из последнего сообщения, последнее сообщение за 2020 год.Сообщения и Темы до СЕГОДНЯ скрываются, Статистика как осталась за 2020 год так и будет, пока пересчет тем/сообщений не сделаешь.Вручную все темы поправил Скрыть/открыть.Потом опять открываешь скрытые темы до СЕГОДНЯ (130 сообщений и 30 тем за 1 день) а статистика темы остается старой.Поэтому и нужно Обновление статистики. Share this post Link to post Share on other sites