我需要mysql表中最接近的较小值

时间:2013-05-20 23:00:39

标签: php mysql sql function select

我正在为我的mmorpg制作基于经验点的排名系统。假设我有两张桌子,

  • table1:username - exp
  • table2:rankname - exp

每个等级都需要特定数量的exp才能升级。现在让我们说用户名:我有550 exp,而在table2我们有:

  • rank1 - 200
  • rank2 - 600

现在我想要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)。

2 个答案:

答案 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";