|
|
|
| Во многих форумах, и 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
|
| |
|
|