Dit kan met één vraag
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Merk op dat char een gereserveerd woord is, dus het moet worden ingepakt in achterste vinkjes. Misschien is dit het werkelijke probleem dat u tegenkwam (syntaxisfout) in plaats van een probleem met uw while-lus. Toch is één vraag de juiste manier