这个想法是运行一种排名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
答案 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++;
}