从MySQL订单订购

时间:2015-05-19 20:47:27

标签: php mysql

这是MySQL查询:

$sql = "SELECT users.*, ranks.rank_number
        FROM users
        INNER JOIN ranks
        ON users.rank_name=ranks.rank_name
        WHERE users.active= 'y'
        ORDER BY ranks.rank_number ASC, users.plvl DESC
        LIMIT $start, $limit";
$result = mysql_query($sql);

我想按rank_number订购:

1,2,3,4,5,6,7,8,9,10,11,12
来自MySQL的

,但我明白了:

1,11,12,10,2,3,4,5,6,7,8,9

那么如何将其设为1,2,3,4,5,6,7,8,9,10,11,12

3 个答案:

答案 0 :(得分:2)

根据您的结果,您似乎正在进行字母排序。它看起来像在你的数据库中,rank_number可能存储为" varchar"而不是整数。在这种情况下,您可以将varchar转换为整数以获得数字排序而不是字母排序。

https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

SELECT users.*, CAST (ranks.rank_number AS SIGNED) as user_rank 
...
order by user_rank ASC

发布您的表格定义将有助于澄清实际情况是否正确。

答案 1 :(得分:2)

对您的陈述最快的解决方法是在+0条款中将 ranks.rank_number 附加到ORDER BY ...

ORDER BY ranks.rank_number+0 ASC, ...
                          ^^

如果rank_numberCHARVARCHAR数据类型,并且您希望按 numeric 值排序,而不是对字符串进行排序,那么它将“正常工作”表示。

还有其他表达式可以实现等效结果,将字符串表示转换为数值。 “添加零”技巧是最短的修复,只是语句的两个字符添加。

通常,我们倾向于将 numeric 值存储在使用numeric数据类型(整数,小数,浮点数)声明的列中,而不是将它们存储为字符串。然后我们避免您通过订购报告的那种问题。

显示返回行的顺序非常奇怪。

肯定 10 之后是否订购了 12 ?如果按字符串值对其进行排序/排序,我们希望字符串值 10 11 之前。报告返回的行的顺序非常奇怪。

(如果您报告返回的行的顺序是准确的,那么我怀疑第二个字符实际上是大写字母 'O' 而不是零 {{1} }

如果是这种情况,那么'0'技巧会将 +0 (一个和大写O)转换为 '1O'+0 <的数值/ strong>,因此相当于 1 ,它也会评估为 '1'+0

答案 2 :(得分:1)

将其转换为int

1

来自Sql Server query varchar data sort like int