php - 来自 MySQL 的订单

标签 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

最佳答案

对语句的最快修复是将 +0 附加到 ORDER BY 中的 ranks.rank_number条款...

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

如果 rank_numberCHARVARCHAR 数据类型,并且您希望按数字进行排序 值,而不是对字符串表示形式进行排序。

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

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


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

确信10是在12之后订购的吗?如果将其作为字符串值进行排序/排序,我们预计字符串值 10 位于 11 之前>。您报告返回的行的顺序非常奇怪。

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

如果是这种情况,那么 +0 技巧会将 '1O'+0 (一和大写 O)转换为数字值 1,因此相当于 '1'+0,其计算结果也为 <强>1

关于php - 来自 MySQL 的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30335820/

相关文章:

php - 多张照片上传php mysql

mysql - 我想将两个 Sequelize 查询合并为单个 Sequelize 查询

php - 如何将 $row ["Text' ] 回显到 TextField

MySQL 性能 : . ..IN (SELECT...) 对比 IN ('12' , '18' , 30'...) 对比临时表

php - 循环中的 SQL 查询累积每个循环

javascript - 获取Javascript变量来分配php变量

php - 如何使用适当的 SQL 标准在 MYSQL 中计算具有特定纬度和经度的所需半径或距离?

Mysql需要选择多个条目数量最多的所有值

php - 通过比较 varchar 中的所有字母/数字进行不精确搜索。 mysql、php

PHPUnit 3.6 PHP 5.2.7 PHP 解析错误 : syntax error, unexpected T_FUNCTION, expecting ')' in/usr/local/bin/phpunit on line 16