我的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 字段。
作为一个数字大于 1000 和 9000。但是,字符串是根据其字典排序顺序(即按字母顺序)进行比较的,因此您可以得到以下顺序:
1000
10000
9000
您的列是文本数据类型(例如 VARCHAR)而不是数字。
首先,如果您在数字比较中使用字段,就像使用 pts (<=) 一样,请不要将其与字符串进行比较。从$userpts周围删除引号。
此外,将 PHP 变量直接嵌入到 SQL 语句中可能会使您容易受到 SQL 注入的影响(取决于代码的其余部分)。