While döngüsü içinde ekrana yazdırmaktan ziyade, bütün veriler bir array'de tutup sıralama yaptıktan sonra başka bir döngü ile ekrana yazdırabilirsin.

<? 

$degerler = array();

while(list($id, $usernames, $passwords, $emails) = @mysql_fetch_row($result)) 
{ 

$yaz = mysql_fetch_array(mysql_query("select * from user where id = '$id'")); 

$degerler[] = number_format(bugunku_kazanc($yaz['kimlik'],$yaz['id'])) . '|' . number_format(bakiye($yaz['id']),2) . '|' . $yaz['username'];

}

sort($degerler);

for($i = 0; $i < count($degerler); $i++){

  $veriler = explode('|',$degerler[$i]);

?> 

        <tr> 
            <td height="25" width="250" style="border: 1px solid #C0C0C0">&nbsp;<?=$veriler[2]?></td> 
             <td height="25" width="150" style="border: 1px solid #C0C0C0">&nbsp;<?=$veriler[1]?> TL</td> 
             <td height="25" width="150" style="border: 1px solid #C0C0C0">&nbsp;<?=$veriler[0]?></td> 
        </tr> 


<?

}
 ?>
veya bugunku_kazanc değerini hesaplayan SQL kodunu bilseydik ona görede bi sıralama yapabilirdik.