1

我正在为我的 mmorpg 制作基于经验点的等级系统。假设我有 2 张桌子,

  • 表 1:用户名 - exp
  • 表 2:rankname - exp

每个等级都需要特定数量的经验才能晋升。现在假设用户名:我有 550 exp,在 table2 中我们有:

  • 排名 1 - 200
  • 排名2 - 600

现在我希望 php 函数通过检查我的 exp 与表 2 exp 来告诉我我仍然在 rank1,尽管我的 exp 不是 exp 列中的值。我尽力了,我得到了:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,
boolean given in... line 6

这是我的代码:

function expToRank($userexp)
{
   global $mysqli;
   $sql="SELECT TOP 1 *
         FROM table2
         WHERE ABS(".$userexp."-exp) =
         ( SELECT MIN( ABS(".$userexp."-exp)) from table2 )";
   $result=mysqli_query($mysqli,$sql);
   $rankarray=mysqli_fetch_array($result,MYSQLI_ASSOC);
   $rankname=$rankarray["rankname"];
   return $rankname;
}

提示:2 exp 列是 BIGINT(60)。

4

2 回答 2

5

您可以通过查询找到低于某个exp值的最高排名order by。在 MySQL 中,使用limit代替top

select  * 
from    ranktable
where   exp < $userexp
order by
        exp desc
limit   1
于 2013-05-20T23:02:32.800 回答
0

为什么不这样:

$sql = "SELECT MAX(rank) FROM table2 WHERE $userexp >= exp";
于 2013-05-20T23:06:02.350 回答