如果用户有超过10,000点他们得到5级,但他们得到level1? mysql逻辑错误?

时间:2012-06-20 07:51:18

标签: php mysql

我的mysql查询语法有一个奇怪的问题。 我已经建立了一个系统,当用户有一定数量的积分时,它会向用户显示特定的排名。

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

Mysql表结构:
表名:排名 结构:pts,rankname

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的分数可以正常获得等级名称)

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

3 个答案:

答案 0 :(得分:6)

确保pts字段是number field不是 CHAR或VARCHAR字段。

10000作为一个数字大于1000和9000.然而,字符串根据它们的字典排序顺序(即按字母顺序)进行比较,所以你得到这个顺序:

1000
10000
9000

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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