我正在为我的mmorpg制作基于经验点的排名系统。假设我有两张桌子,
每个等级都需要特定数量的exp才能升级。现在让我们说用户名:我有550 exp,而在table2我们有:
现在我想要php函数告诉我,我仍然在rank1,通过检查我的exp对表2 exp虽然我的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)。
答案 0 :(得分:5)
您可以使用exp
查询找到低于特定order by
值的最高排名。在MySQL中,使用limit
代替top
:
select *
from ranktable
where exp < $userexp
order by
exp desc
limit 1
答案 1 :(得分:0)
为什么不这样:
$sql = "SELECT MAX(rank) FROM table2 WHERE $userexp >= exp";