In plaats van de variabelen in een aparte SET
in te stellen , heb je geprobeerd een CROSS JOIN
te gebruiken? :
$query = "
SELECT `id`,
`rank`,
@num := if(@points = `rank`, @num, @num + 1) as `point_rank`
FROM `said`
CROSS JOIN (SELECT @points:=-1, @num:=0) c
ORDER BY `rank` *1 desc, `id` asc";