Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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 Яндекс.Метрика Яндекс цитирования