Isso pode ser feito com uma consulta
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Observe que char é uma palavra reservada, portanto, terá que ser envolvida em back ticks. Talvez este seja o problema real que você encontrou (erro de sintaxe) em vez de um problema com seu loop while. No entanto, uma consulta é o caminho certo