2016-05-09 80 views
-1

我有一个MySQL数据库中有一个表(1-10),并有一个XP_NEEDED列的表,我已经有一个数字,我想从该数字(数字是XP)中找到关卡,我知道如何在下面的方式做到这一点...如何从XP获得正确的行?

Example (Short): 
if ($xpLookingFor >= 100 && $xpLookingFor < 200) // Checks if not high as level 2 { 
    return '1'; // Would be returning Level1 
} 
else if ($xpLookingFor >= 200 && $xpLookingFor < 300) // Checks if not high as level 3 { 
    return '2'; // Would be returning Level2 
} 

所以它会检查其是否比当前水平高,但没有那么高的水平aboves xp_needed,如果其高达下一级别的下一个如果声明将处理它。

但是这种方式有很多可能缩短的代码,最好的方法是什么?有没有一个内置的mysql功能?

+0

您有[问题数量](http://stackoverflow.com/users/6276855/thegod39)在这里回答良好但未标记为已解决。在适用的时候,请开始标记答案,否则你会有很多人帮助你而不提供任何回报。如果您不知道如何执行此操作,请参阅[this](http://stackoverflow.com/help/someone-answers)。 – camelCase

回答

0

因为您使用的是elseif,所以if的第一部分不需要,您可以将它们堆叠在一起。

function getLevel($xpLookingFor){ 
    if ($xpLookingFor < 100){ 
     return 0; 
    } 
    else if ($xpLookingFor < 200){ 
     return 1; 
    } 
    else if ($xpLookingFor < 300){ 
     return 2; 
    } 
    else if ($xpLookingFor < 375){ 
     return 3; 
    } 
    else if ($xpLookingFor < 400){ 
     return 4; 
    } 
    else { 
     return 'MAX!'; 
    } 
} 

See example on IdeOne

2

林不知道这是否是你所需要的问题不是太清楚。

<?php 
function getLevel($xp, $maxLevel) { 
    for($check = 1; $check < $maxLevel; $check++) 
     if ($xp >= ($check*100) AND $xp < ($check*100)+100) return $check; 
    return $maxLevel; 
} 

//Param #1 is the xp level and #2 is the max level 
echo getLevel(503, 10); // returns 5 
echo getLevel(123, 10); //returns 1 
echo getLevel(1405, 20); //returns 14 
echo getLevel(1405, 10); //returns 10 
?> 
+0

好的解决方案+1,唯一的问题是如果每个级别都不是100的倍数,这是行不通的,但是从这个问题来看还不清楚是不是这种情况。 –