Dette kan gøres med én forespørgsel
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Bemærk, at char er et reserveret ord, så det skal pakkes ind i flueben. Måske er dette det faktiske problem, du løb ind i (syntaksfejl) snarere end et problem med din while-løkke. Ikke desto mindre er én forespørgsel den rigtige måde