Hm... I could join those first three queries for you if you so desire.
In fact I already did. Your new countupdate.php should be the following:
PHP Code:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ############# REQUIRE BACK-END #######################
require_once('./global.php');
// ############# UPDATE PM COUNTS IN USER TABLE #######################
if($vbulletin->userinfo['usergroupid'] != '6'){
exit();
}
// Get all users PMs
$pmdata = $db->query_first("
SELECT user.userid, user.pmtotal, user.pmunread,
pm.pmunread AS pmsunread, pm.pmid
FROM " . TABLE_PREFIX . "user AS user
LEFT JOIN " . TABLE_PREFIX . "pm AS pm ON(pm.userid = user.userid)
WHERE user.userid != 0
ORDER BY user.userid ASC
");
while ($pms = $db->fetch_array($pmdata))
{
$lastuser = ($lastuser == $pms['userid']) ? true : false;
$pmtotal = $lastuser ? $pmtotal : 0;
$pmunread = $lastuser ? $pmunread : 0;
if ($pms['pmid'])
{
$pmtotal++;
if ($pms['pmsunread'])
{
$pmunread++;
}
}
$pmusers["$pms[userid]"] = array(
'true_total' => $pmtotal,
'user_total' => $pms['pmtotal'],
'true_unread' => $pmunread,
'user_unread' => $pms['pmunread']
);
}
$db->free_result($pmdata);
unset($pms, $pmtotal, $pmunread, $lastuser);
foreach ($pmusers AS $pmuserid => $pminfo)
{
if (($pminfo['true_total'] != $pminfo['user_total']) OR ($pminfo['true_unread'] != $pminfo['user_unread']))
{
$db->query_write("
UPDATE " . TABLE_PREFIX . "user
SET pmtotal = $pminfo[true_total],
pmunread = $pminfo[true_unread]
WHERE userid = $pmuserid
");
echo "USERID $pmuserid was updated!<br />";
}
}
unset($pmuserid, $pminfo, $pmusers);
echo 'All Done!';
?>