系统正常运行,但我确信还有另一种编码方式,以便根据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的更简单方法。非常感谢!
答案 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不是连接,因为没有与成员关联的关键