Questo può essere fatto con una query
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Nota che char è una parola riservata, quindi dovrà essere racchiusa tra zecche posteriori. Forse questo è il vero problema che hai riscontrato (errore di sintassi) piuttosto che un problema con il tuo ciclo while. Tuttavia, una query è la strada giusta