首页 > 解决方案 > 在 PHP MySQL 中相应地对数字和字母数字进行排序

问题描述

我正在使用类似的查询;

1
2
3A
3
4A
4

但我想得到它

1
2
3
3A
4
4A

我正在使用的是

SELECT * FROM `sections` ORDER BY CAST(`act` as DECIMAL) ASC

我真正想要的是第一个数字,然后是字母数字

3 then 3A

标签: mysqlsorting

解决方案


考虑到您的acts列中总是先有整数,然后是字符。通常这称为Natural Sorting.

问题理解:

  • 当我们处理单个数字的变化时,正常排序非常有效,即1, 1A, 1B, 1AB...
  • 由于字符串类型,当我们在以相同数字开头的数字(如1, 10, 100....

我们可以按照以下方式排序。

  • 首先根据它们的整数值对它们进行排序。
  • 然后正常对它们进行排序,默认情况下由 mysql 负责。
SELECT * FROM sections
ORDER BY CAST(acts AS UNSIGNED), acts

检查相应的fiddle。它适用于 MySQL 5.5, 5.6, 5.7 & 8.0


推荐阅读