Można to zrobić za pomocą jednego zapytania
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Zwróć uwagę, że znak jest słowem zastrzeżonym, więc będzie musiał być zawinięty w tylne znaki. Może jest to problem, na który natrafiłeś (błąd składni), a nie problem z pętlą while. Niemniej jednak jedno zapytanie to właściwy sposób