如何在PHP中从数据库中订购字符串格式


How to order strings format from database in PHP?

>我有这样的数字:666/2014, 01/2014, 1/2014, 02/2014, 125/2014, 06/2014 ...等作为数据库中名为"n_inscription"的字符串。我想按顺序从数据库中检索这些字符串

我用了这个:

$sql_students = $bd->query("SELECT * FROM `es_student_infos`
                            WHERE school_year='$school_year'
                            ORDER BY right(n_inscription, 4) * 1,
                            substring_index(n_inscription, '/', 1) * 1");

我得到这样的结果:01/2014,02/2014,06/2014,1/2014,125/2014,第666/2014号

我正在寻找的结果是这样的:01/2014,1/2014,02/2014,06/2014,125/2014,第666/2014号

有什么建议吗?

最好的方法可能是规范化输入,以便正常排序执行您希望它执行的操作。例如,将学生编号和年份存储在两个单独的INTEGER列中,然后ORDER BY studentNumber ASC, inscriptionYear ASC

如果这绝对不可能:

SELECT
  *
FROM
  es_student_infos
ORDER BY
  CAST(RIGHT(n_inscription, 4) AS UNSIGNED) ASC,
  CAST(LEFT(n_inscription, LOCATE('/', n_inscription) - 1) AS UNSIGNED) ASC

链接到小提琴演示解决方案:http://sqlfiddle.com/#!2/a5538/1/0

正确的方法是将n_inscription的类型更改为日期/日期时间/时间戳,然后默认使用顺序。

使用比较和日期计算等日期字段有更多的优势,所以我建议你这样做。

编辑:将顺序更改为school_year而不是n_inscription:

 SELECT * FROM `es_student_infos`
                            WHERE school_year='$school_year'
                            ORDER school_year