Пересчет записей пользователя

Изначально движок имеет инструменты для пересчета данных, например, сообщений пользователей, но мне показалось, что эти инструменты сыроватые и мне захотелось переписать все "приблуды", но все ни как время не найду для этого... Сегодня мне понадобилось пересчитать количество опросов, которые создавали пользователи. Для этого я написал простенький инструмент, выглядит он так:
define('PHPFOX', true);

include('include/setting/server.sett.php');

$db = new mysqli($_CONF['db']['host'], $_CONF['db']['user'], $_CONF['db']['pass'], $_CONF['db']['name']);
if ($db->connect_errno)
{
	exit('Error MYSQLI: ' . $db->connect_error);
}
$db->set_charset('utf8');

$q = 'SELECT user_id
	FROM phpfox_user';
$r = $db->query($q) or exit($db->error);

while ($user = $r->fetch_assoc())
{
	$q = 'SELECT COUNT(poll_id) AS count
		FROM phpfox_poll
		WHERE user_id = ' . (int) $user['user_id'];
	$poll = $db->query($q) or exit($db->error);
	$data = $poll->fetch_assoc();

	$q = 'UPDATE phpfox_user_field
		SET
			total_poll = ' . $data['count'] . ' 
		WHERE user_id = ' . (int) $user['user_id'];
	$db->query($q) or exit($db->error);

	echo 'User: #' . $user['user_id'] . ' Poll: ' . $data['count'] . '<br />';
}

Написан для запуска из корня сайта. Перед выполнением сценария, рекомендую сделать резервную копию Базы Данных.

Код писался для пересчета опросов, но его недолго переписать для пересчета другого, чего угодно, например, статей блога или страниц. Вот так будет для блога:
define('PHPFOX', true);

include('include/setting/server.sett.php');

$db = new mysqli($_CONF['db']['host'], $_CONF['db']['user'], $_CONF['db']['pass'], $_CONF['db']['name']);
if ($db->connect_errno)
{
	exit('Error MYSQLI: ' . $db->connect_error);
}
$db->set_charset('utf8');

$q = 'SELECT user_id
	FROM phpfox_user';
$r = $db->query($q) or exit($db->error);

while ($user = $r->fetch_assoc())
{
	$q = 'SELECT COUNT(blog_id) AS count
		FROM phpfox_blog
		WHERE user_id = ' . (int) $user['user_id'];
	$blog = $db->query($q) or exit($db->error);
	$data = $blog->fetch_assoc();

	$q = 'UPDATE phpfox_user_field
		SET
			total_blog = ' . $data['count'] . ' 
		WHERE user_id = ' . (int) $user['user_id'];
	$db->query($q) or exit($db->error);

	echo 'User: #' . $user['user_id'] . ' Blog: ' . $data['count'] . '<br />';
}
Немного поправил код, теперь сценарий обновляет не одно поле а сразу шесть штук:
- total_blog
- total_comment
- total_pages
- total_photo
- total_poll
- total_video
define('PHPFOX', true);

include('include/setting/server.sett.php');

$db = new mysqli($_CONF['db']['host'], $_CONF['db']['user'], $_CONF['db']['pass'], $_CONF['db']['name']);
if ($db->connect_errno)
{
	exit('Error MYSQLI: ' . $db->connect_error);
}
$db->set_charset('utf8');

$q = 'SELECT user_id
	FROM phpfox_user';
$u = $db->query($q);

$items = [
	'blog',
	'comment',
	'pages',
	'photo',
	'poll',
	'video'
];

while ($user = $u->fetch_assoc())
{
	foreach ($items as $item)
	{
		$field = $item;
		if ($item == 'pages')
		{
			$field = 'page';
		}

		$q = 'SELECT COUNT(' . $field . '_id) AS count
			FROM phpfox_' . $item . '
			WHERE user_id = ' . (int) $user['user_id'];
		$data = $db->query($q) or exit($db->error);
		$record = $data->fetch_assoc();

		$q = 'UPDATE phpfox_user_field
			SET
				total_' . $item . ' = ' . $record['count'] . ' 
			WHERE user_id = ' . (int) $user['user_id'];
		$db->query($q) or exit($db->error);
	}
}

echo 'Ok!';

Как все (практически) добавить новые поля не составит труда.