【问题标题】:assign a specific value to an array element using a MySQL query使用 MySQL 查询将特定值分配给数组元素
【发布时间】:2010-09-04 13:39:05
【问题描述】:

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

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

编辑:我也需要在此处添加 WHERE f_id = $id。

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

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

例如你的排名是:01

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

任何帮助将不胜感激!

-卡勒姆

【问题讨论】:

  • 我认为你应该重新表述一下这个问题,不清楚是什么定义了排名。
  • @Sabeen Malik:我现在说清楚了吗?
  • 我认为您应该解释一下数组的外观以及 f_score 的含义。此外,查询似乎不正确,它是否包含基于数组中已有值的 where 子句?
  • f_score 中会存储什么? 01、02、03等??
  • 添加了更多信息

标签: php mysql ranking


【解决方案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++;
}

【讨论】:

  • 是的,实际上你的权利。太糟糕了,我忘了考虑这个:/ Erm,我需要在其中添加一个 WHERE f_id = $id 以正确显示所选派系。
  • 另外,知道如何显示排名 1、2、3 的人实际上对网页的另一部分非常有用
  • 我还是不明白你想在这里做什么。你想要类似的东西:Faction ID 23 - your rank is: 1。您到底想在网页上显示什么?
  • 它的意思是显示:$name & Rank:$rank。其中 name 是取自 f_name 列的值(我已经将其分配给变量), $rank 是此排名脚本根据 f_score 中的数字分数为派系 id 分配和回显的数值列。
  • 如果我能找到回应派系 id 的方法:排名 1。从 f_score 值分配给该 id 的排名值。我可以从那里拿走吗?
猜你喜欢
  • 2010-12-13
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多