In the promotion.php cron file the code that changes a usergroup is as follows:
PHP Code:
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "user
SET displaygroupid = IF(displaygroupid = usergroupid, $joinusergroupid, displaygroupid),
usergroupid = $joinusergroupid,
infractiongroupid =
" . (!empty($sql_id["$joinusergroupid"]) ? "
CASE
" . implode(" \r\n", $sql_id["$joinusergroupid"]) . "
ELSE 0
END" : "0") . "
,infractiongroupids =
" . (!empty($sql["$joinusergroupid"]) ? "
CASE
" . implode(" \r\n", $sql["$joinusergroupid"]) . "
ELSE ''
END" : "''") . "
WHERE userid IN (0$ids)
");
I'd suggest adapting that to your needs.