是否有更简单的方法将此XP编码为LVL脚本?

时间:2013-12-17 14:30:59

标签: php mysql

系统正常运行,但我确信还有另一种编码方式,以便根据XP点更容易访问用户级别。

$getxp = mysql_query("SELECT `xp` FROM `members` WHERE `id` = '$logged[id]'"); 
$xp = mysql_fetch_array($getxp);
$x = $xp['xp']; 
echo "$x";


$level = MYSQL_QUERY("SELECT * FROM `levels` WHERE `xp` >= '$x' LIMIT 1"); 
while ($n = mysql_fetch_array($level)) {
$mylvl = $n[level];
echo "You are a level $mylvl";
} 

我有一个'MEMBERS'数据库表(ID,USERNAME,PASS,XP)和一个'LEVELS'表(ID,XP,LEVELS)。让我知道为用户获取LVL的更简单方法。非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为应该这样做。

SELECT `levels` 
FROM `members` m 
LEFT JOIN `levels` l ON m.`xp` >= l.`xp`
WHERE m.`id` = '. $logged[id] .'
ORDER BY `levels` ASC
LIMIT 1;

获取您的member.id = $ logged [id]所有成员。接下来,将member.id链接到小于当前exp的所有xp-requirements。这将为您提供您所超越的所有级别的列表。现在,您唯一需要做的就是以最高级别为首的方式对它们进行排序,然后将其限制为1个条目。这应该会导致您的exp允许的最高级别 - 因此是您当前的级别。

请注意,当然,您拥有的级别越多,LEFT JOIN变得越大,这将最终消耗SQL服务器上的更多内存。

还要注意你正在使用MYSQL。这已经过时,将从下一个PHP版本中删除。至少看看MYSQLi,或者直接进入PDO。这样,一旦新PHP发布,您就不必更改所有代码。

答案 1 :(得分:0)

$sql = "SELECT * FROM levels WHERE xp >= (SELECT xp FROM members WHERE id='".$loggedin['id']."')";

subselect不是连接,因为没有与成员关联的关键