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

时间:2014-11-29 19:49:19

标签: php mysql

我有这样的数字:666 / 2014,01 / 2014,1 / 2014,20 / 2014,125 / 2014,06 / 2014 ......等等,因为STRING命名为' n_inscription'在数据库中。 我想在数据库的ORDER中检索这些字符串

我用过这个:

$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, 二千〇一十四分之一, 二千〇一十四分之一百二十五, 二千〇一十四分之六百六十六

我想找的结果是这样的: 01/2014, 二千〇一十四分之一, 02/2014, 06/2014, 二千〇一十四分之一百二十五, 二千〇一十四分之六百六十六

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

正确的方法是将n_inscription的类型更改为date / datetime / timestamp,然后默认使用order。

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

编辑:将照片更改为school_year而不是n_inscription:

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

答案 1 :(得分:2)

最好的方法可能是对输入进行标准化,以便正常排序能够完成您想要的操作。例如,将学生编号和年份存储在两个单独的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