Bu, kullanıcı gönderi sayılarını güncelleyen bir sorgudur. Sorgu, konu ve gönderilerin denetlenen ve silinen durumlarını, ayrıca her forumun "Bu forumdaki gönderileri kullanıcının toplamına dahil et" ayarını dikkate alır.
Yukarıdaki tek sorgu, çok büyük forumlarda zaman aşımına uğrayabilir. Bu durumda, her sorguda daha az sayıda kullanıcıyı işleyen sorgulara bölebilirsiniz. Aşağıdaki örnek, her biri en fazla 50,000 kullanıcıyı ele alan üç parçaya bölerek işleyecektir. Forumunuz için gerektiğinde değiştirin ve her biri iki user.user_id WHERE ifadesinde daha yüksek sayılara sahip ek sorgularla çalıştırın, artık eşleşen kayıt kalmayana kadar devam edin:
SQL:
UPDATE xf_user AS user SET message_count =
COALESCE(
(
SELECT COUNT(*)
FROM xf_post AS post
INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
WHERE post.user_id = user.user_id AND post.message_state = 'visible'
AND thread.discussion_state = 'visible' AND forum.count_messages = 1
GROUP BY post.user_id
), 0 );
Yukarıdaki tek sorgu, çok büyük forumlarda zaman aşımına uğrayabilir. Bu durumda, her sorguda daha az sayıda kullanıcıyı işleyen sorgulara bölebilirsiniz. Aşağıdaki örnek, her biri en fazla 50,000 kullanıcıyı ele alan üç parçaya bölerek işleyecektir. Forumunuz için gerektiğinde değiştirin ve her biri iki user.user_id WHERE ifadesinde daha yüksek sayılara sahip ek sorgularla çalıştırın, artık eşleşen kayıt kalmayana kadar devam edin:
SQL:
UPDATE xf_user AS user
SET message_count =
COALESCE(
(
SELECT COUNT(*)
FROM xf_post AS post
INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
WHERE post.user_id = user.user_id
AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
AND forum.count_messages = 1
AND user.user_id > 0 AND user.user_id < 50001
GROUP BY post.user_id
), 0 );
UPDATE xf_user AS user
SET message_count =
COALESCE(
(
SELECT COUNT(*)
FROM xf_post AS post
INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
WHERE post.user_id = user.user_id
AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
AND forum.count_messages = 1
AND user.user_id > 50000 AND user.user_id < 100001
GROUP BY post.user_id
), 0 );
UPDATE xf_user AS user
SET message_count =
COALESCE(
(
SELECT COUNT(*)
FROM xf_post AS post
INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
WHERE post.user_id = user.user_id
AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
AND forum.count_messages = 1
AND user.user_id > 100000 AND user.user_id < 150001
GROUP BY post.user_id
), 0 );