0

这个想法是运行一种排序 MySQL 命令,例如:

$sql = mysql_query("SELECT f_score FROM ".TBL_FACTIONS." ASC");

编辑:我也需要在这里添加一个 WHERE f_id = $id 。

我的 MySQL 数据库表中f_score列中的数值应该确定排名。f_score 仅包含数值,从 0 到任何值,用户操作从分数中加减。

然后使用 $sql 遍历一个数组并“排列”每个数组元素。我认为它应该为特定变量分配一个数字,以便我可以在网页上回显该数字。

例如你的等级是:01

我正在寻找轻量级的东西,但如果它不可能做到这一点,赢得最少的服务器使用量,我将不得不将它推到一个 cron 作业或一些不太理想的东西中。我在考虑数组和循环或类似的东西?

任何帮助将不胜感激!

-卡勒姆

4

1 回答 1

1

这段代码:

$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 时跳出循环:

$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++;
}
于 2010-09-04T13:57:53.380 回答