如果用户的积分超过 10,000 分,他们获得 5 级,但他们获得 1 级?MySQL 逻辑错误


if user has above 10,000 points they get level 5 , but they get level1? mysql logic error?

我的mysql查询语法有一个奇怪的问题。我制作了一个系统,当用户拥有一定数量的积分时,该系统可以向用户显示特定的排名。

例如
当他们有1000或更多的积分时,他们是1
级3000点以上,为2
级5000分以上,属于3
级8000点以上,为4
级9000点以上,为5

Mysql 表结构:
表名:等级结构:点,秩名

MySQL 查询如下所示:

$result = mysql_query("SELECT * FROM rank WHERE pts <= '$userpts' ORDER BY pts DESC LIMIT 1")
or die(mysql_error()); 
$row = mysql_fetch_array($result);
if($row){
  $rank = $row['rankname'];
  echo $rank;
}

然而,出现了一个奇怪的问题,当用户积分超过 10,000 点时,他们应该获得排名名称级别 5,但他们获得的排名名称级别为 1(1000-2999 点之间的用户获得)
不知道发生了什么,他们应该得到5级。
(P/S当用户有8500分时,他们得到4级,这意味着低于10k的点可以很好地获得排名名称)

我的查询逻辑有什么问题吗?我自己很困惑。

确保pts字段是数字字段,而不是 CHAR 或 VARCHAR 字段。

10000

作为一个数字大于 1000 和 9000。但是,字符串是根据其字典排序顺序(即按字母顺序)进行比较的,因此您可以得到以下顺序:

1000
10000
9000

您的列是文本数据类型(例如 VARCHAR)而不是数字。

首先,如果您在数字比较中使用字段,就像使用 pts (<=) 一样,请不要将其与字符串进行比较。从$userpts周围删除引号。

此外,将 PHP 变量直接嵌入到 SQL 语句中可能会使您容易受到 SQL 注入的影响(取决于代码的其余部分)。