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

Форум MySQL

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

 

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

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

тема: Устранение нулевых счетчиков тем
 
 автор: cheops   (21.03.2011 в 18:11)   письмо автору
 
 

Во многих форумах, и LiteForum тут не является исключением, используется схема, при которой количество сообщений в теме подсчитывается при её добавлении. Разумеется с темой может происходить множество операций - она может модерироваться, разбиваться, объединяться и иногда при пересчете количества сообщений в форуме происходят ошибки. В частности появляются темы с 0 количеством сообщений, если вообще не отрицательным. Для устранения этой проблемы хорошо подходит многотабличный UPDATE-запрос (здесь проблема решается в архивной таблице archive_themes, однако, схожий запрос может применяться для обычной таблицы themes)
UPDATE (SELECT
  archive_themes.id_theme AS id_theme,
  COUNT(pst.id_post) AS new_number
FROM archive_themes  
LEFT JOIN (SELECT * FROM archive_posts 
           WHERE id_theme IN (SELECT id_theme FROM archive_themes 
                             WHERE number = 0)) AS pst
USING(id_theme)
WHERE archive_themes.number = 0
GROUP BY archive_themes.id_theme) AS surrogat
LEFT JOIN
archive_themes
ON surrogat.id_theme = archive_themes.id_theme
SET archive_themes.number = surrogat.new_number
WHERE surrogat.id_theme = archive_themes.id_theme

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

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