按id排序html表,在db中存储为varchar

时间:2013-11-22 10:41:14

标签: php mysql html-table

我在数据库中有一个表,其中一个列将ID存储为varchar。当我使用PHP从db获取数据并将其显示在HTML表中时,我希望它按ID排序。最后,记录被排序,但是以一种奇怪的方式......:

  ID      name
------------------
|AA120  |        |
|AA121  |        |
|AA122  |        |
|AA1199 |        |
|AA119  |        |
|AA1200 |        |
|AA1201 |        |
|AA1202 |        |
etc.

我在查询中使用此字符串:

ORDER BY CONVERT('$ID',UNSIGNED INTEGER)

是否有针对此类问题的修复程序..?

4 个答案:

答案 0 :(得分:3)

为什么不抓取所有记录,并使用natsort对它们进行排序,然后显示它们?

答案 1 :(得分:0)

你得到字母数字(“按字母顺序排列”)排序 - 这就是为什么AA119在AA1199之后出现的原因。 PHP的 natsort 将是一个解决方案,但我宁愿建议切换到填充编号,如AA0119而不是AA119,以防止在混合字母和数字逻辑时出现进一步的问题

答案 2 :(得分:0)

  

尝试此查询,这既适用于整数,也适用于字符串和整数

的组合
select column 
    from table
    order by 
      regexp_substr(column, '^\D*') nulls first,
      to_number(regexp_substr(column, '\d+'))

答案 3 :(得分:0)

你可以尝试这个命令@Dims

  select col_name from table_name order by len(col_name), col_name