Това може да стане с една заявка
SELECT * FROM `char` WHERE char_id = (SELECT char_id FROM rankpvp ORDER BY ratio DESC LIMIT 1)
Обърнете внимание, че char е запазена дума, така че ще трябва да бъде увита в обратни кърлежи. Може би това е действителният проблем, с който се сблъскахте (синтактична грешка), а не проблем с вашия while цикъл. Въпреки това, една заявка е правилният начин