Rebuild user post counts (query) 1.x

A database query to rebuild all user post counts.

  1. This will recalculate and update the post counts for all users at once. This is a large query that may take a while to finish.

    Code:
    UPDATE xf_user AS user
    SET message_count = (
    	SELECT COUNT(*)
    	FROM xf_post AS post
    	LEFT JOIN xf_thread AS thread ON (thread.thread_id = post.thread_id)
    	WHERE post.user_id = user.user_id
    	AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
    	GROUP BY post.user_id
    );
    
    If you have forums you wish to exclude from the count then use this query, where 1,2,3 is a comma-list of node_ids that are excluded from the count:

    Code:
    UPDATE xf_user AS user
    SET message_count = (
    	SELECT COUNT(*)
    	FROM xf_post AS post
    	LEFT JOIN xf_thread AS thread ON (thread.thread_id = post.thread_id)
    	WHERE post.user_id = user.user_id
    	AND thread.node_id NOT IN (1,2,3)
    	AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
    	GROUP BY post.user_id
    );
    
    Backup first.

    Because this query is so large you may encounter errors relating to these MySQL settings:

    wait_timeout
    innodb_lock_wait_timeout


    You need to ask your host or server person to increase these settings if you encounter such errors.
    Darkimmortal likes this.