Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пересчет количества сообщений на форуме
 
 автор: cheops   (18.03.2011 в 19:16)   письмо автору
 
 

Не секрет, что на форуме используется аддитивная система подсчета сообщений, т.е. после добавления сообщения в таблице авторов увеличивается на единицу поле themes, которое и выводится в списке авторов. Темы скрываются или удаляются, а значение themes не корректируется. Я решил подсчитать реальное количество сообщений посетителей форума и скорректировать эти значения. Тем более задача мне показалась интересной в силу того, что форум имеет архивную и активную таблицу с сообщениями.
В первую очередь я удалил скрытые темы и их сообщения, после чего удалил все скрытые сообщения (из активной и архивной таблицы). Пересчет сообщений для всех пользователей задача достаточно объемная и была тут же заблокирована хостером. Поэтому я решил ограничиться первыми 100 наиболее активными участниками. Ниже представлен SQL-запрос, который пересчитывает количества сообщений по обеим таблицам форума
SELECT
  ath.name,
  cnt.total,
  arh.total,
  (IFNULL(cnt.total,0) + IFNULL(arh.total,0)) AS summ
FROM
  (SELECT * FROM authors ORDER BY themes DESC LIMIT 100) AS ath
  LEFT JOIN (
  SELECT id_author, COUNT(posts.id_author ) AS total
  FROM posts
  WHERE posts.hide = 'show'
  GROUP BY posts.id_author
  ORDER BY posts.id_author
  ) AS cnt ON ( ath.id_author = cnt.id_author ) 
  LEFT JOIN (
  SELECT id_author, COUNT(archive_posts.id_author ) AS total
  FROM archive_posts
  WHERE archive_posts.hide = 'show'
  GROUP BY archive_posts.id_author
  ORDER BY archive_posts.id_author
) AS arh ON( ath.id_author = arh.id_author )
ORDER BY summ DESC ;
После чего не составило труда составить UPDATE-запрос
UPDATE
(SELECT * FROM authors ORDER BY themes DESC LIMIT 100) AS ath
LEFT JOIN authors
ON (authors.id_author = ath.id_author)
LEFT JOIN (
  SELECT id_author, COUNT(posts.id_author ) AS total
  FROM posts
  WHERE posts.hide = 'show'
  GROUP BY posts.id_author
  ORDER BY posts.id_author
) AS cnt ON ( ath.id_author = cnt.id_author ) 
LEFT JOIN (
  SELECT id_author, COUNT(archive_posts.id_author ) AS total
  FROM archive_posts
  WHERE archive_posts.hide = 'show'
  GROUP BY archive_posts.id_author
  ORDER BY archive_posts.id_author
) AS arh ON( ath.id_author = arh.id_author )
SET authors.themes = (IFNULL(cnt.total,0) + IFNULL(arh.total,0))
WHERE authors.id_author = ath.id_author;

  Ответить  
 
 автор: Valick   (18.03.2011 в 19:40)   письмо автору
 
   для: cheops   (18.03.2011 в 19:16)
 

мертвые души :)
А нельзя в информацию о пользователе добавить дату регистрации?
Память у меня не очень, а ужасно интересно сколько я тут уже ошиваюсь на форуме.
Ну или хотябы послать меня по почте, а я себе на дереве зарубки сделаю :)

  Ответить  
 
 автор: cheops   (18.03.2011 в 19:52)   письмо автору
 
   для: Valick   (18.03.2011 в 19:40)
 

>А нельзя в информацию о пользователе добавить дату регистрации?
Да нужно будет заняться.

>Память у меня не очень, а ужасно интересно сколько я тут уже ошиваюсь на форуме.
>Ну или хотябы послать меня по почте, а я себе на дереве зарубки сделаю :)
База данных говорит, что первое ваше сообщение сообщение было в теме http://softtime.ru/forum/read.php?id_forum=1&id_theme=54037.

  Ответить  
 
 автор: Valick   (19.03.2011 в 09:59)   письмо автору
 
   для: cheops   (18.03.2011 в 19:52)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования