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"> <?=$veriler[2]?></td>
<td height="25" width="150" style="border: 1px solid #C0C0C0"> <?=$veriler[1]?> TL</td>
<td height="25" width="150" style="border: 1px solid #C0C0C0"> <?=$veriler[0]?></td>
</tr>
<?
}
?>veya
bugunku_kazanc değerini hesaplayan SQL kodunu bilseydik ona görede bi sıralama yapabilirdik.