这是 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
?
最佳答案
对语句的最快修复是将 +0
附加到 ORDER BY
中的 ranks.rank_number
条款...
ORDER BY ranks.rank_number+0 ASC, ...
^^
如果 rank_number
是 CHAR
或 VARCHAR
数据类型,并且您希望按数字进行排序 值,而不是对字符串表示形式进行排序。
还有其他表达式可以实现等效结果,将字符串表示形式转换为数值。 “添加零”技巧是最短的修复方法,只需在语句中添加两个字符即可。
通常,我们倾向于将数字值存储在用数字数据类型(整数、小数、浮点)声明的列中,而不是将它们存储为字符串。这样我们就可以避免您在订购时报告的那种问题。
显示返回的行的顺序非常奇怪。
您确信10
是在12
之后订购的吗?如果将其作为字符串值进行排序/排序,我们预计字符串值 10
位于 11
之前>。您报告返回的行的顺序非常奇怪。
(如果您报告返回的行的顺序是准确的,那么我怀疑第二个字符实际上是大写 O 'O'
而不是零 '0'
。
如果是这种情况,那么 +0
技巧会将 '1O'+0
(一和大写 O)转换为数字值 1
,因此相当于 '1'+0
,其计算结果也为 <强>1
。
关于php - 来自 MySQL 的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30335820/