Этот код:
$result = mysql_query("SELECT f_name FROM ".TBL_FACTIONS." ORDER BY f_score DESC");
$i = 1;
while($row = mysql_fetch_assoc($result))
{
echo "{$row['f_name']} & Rank: {$i}<br>";
$i++;
}
Будет выводить:
Bla bla & Rank: 1
Foo bar & Rank: 2
Etc.
SQL для ранга конкретной записи немного сложен.Вы можете попробовать следующее:
// E.g. rank for f_id = 123
$id = 123;
$sql = "
SELECT `a`.`rank` + `b`.`rank` AS `rank`
FROM (SELECT COUNT(*)+1 AS `rank`
FROM ".TBL_FACTIONS."
WHERE `f_score` > (SELECT `f_score`
FROM ".TBL_FACTIONS."
WHERE `f_id` = {$id})) AS `a`
STRAIGHT_JOIN (SELECT COUNT(*) AS `rank`
FROM ".TBL_FACTIONS."
WHERE `f_score` = (SELECT `f_score`
FROM ".TBL_FACTIONS."
WHERE `f_id` = {$id}) AND `f_id` < {$id}) AS `b`
";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
echo "{$id} is ranked {$row[0]}";
Я нашел запрос здесь , и он имеет смысл, но, пожалуйста, тщательно проверьте, если полученные результаты соответствуют ожидаемым.
В качестве альтернативы, если ваш набор записей не слишком велик, вы можете просто просмотреть результаты и выйти из цикла, когда доберетесь до нужного идентификатора:
$id = 123;
$result = mysql_query("SELECT f_id FROM ".TBL_FACTIONS." ORDER BY f_score DESC");
$i = 1;
while($row = mysql_fetch_assoc($result))
{
if($row['f_id'] == $id)
{
echo "{$row['f_id']} is ranked {$i}<br>";
break;
}
$i++;
}