使用MySQL查询为数组元素指定特定值

时间:2010-09-04 13:39:05

标签: php mysql ranking

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

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

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

  

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

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

  

E.g。 您的排名是:01

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

任何帮助将不胜感激!

-Callum

1 个答案:

答案 0 :(得分: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]}";

我找到了查询here并且这是有意义的,但如果您获得的结果符合您的预期,请彻底测试。

或者,如果你的记录集不是太大,你可以循环搜索结果,当你找到你想要的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++;
}