如何在mySQL中订购1,2,3而不是1,10,11,12

时间:2009-12-02 14:03:00

标签: mysql sql-order-by

以下代码按id.1,10,11,12的顺序输出。

我想把它变成1,2,3,4 ......

有谁能告诉我应该做些什么。

$Q = $this->db->query('SELECT P.*, C.Name AS CatName FROM products AS P LEFT JOIN categories C ON C.id = P.category_id');

提前致谢。

6 个答案:

答案 0 :(得分:59)

首先,在最后添加order by子句:

ORDER BY category_id

如果category_id是一个字符串,那么你必须将它视为一个整数。有几种方法可以做到这一点。我通常加零。你也可以施展它。

ORDER BY category_id + 0

答案 1 :(得分:10)

您可以通过执行以下操作进行显式转换:

CAST ORDER(category_id AS UNSIGNED INTEGER)

但您应该重新考虑数据库布局,因为只包含数值的字段也应该是数字类型。

祝福, 费边

答案 2 :(得分:8)

如前所述,MySQL不支持字母数字排序。解决这个问题的一个常见技巧是首先按长度排序:

ORDER BY LENGTH(column_name), column_name

只要值的非数字部分长度相同,这将在10之前排序1,在100之前排序10等等。

答案 3 :(得分:6)

确保包含1,2,3,4的列是INT类型,如果是TEXT,则不会得到数字顺序,但是你描述的是1,10,11,2,22 ,23,31等;

与其他人一样,请使用ORDER BY

答案 4 :(得分:0)

排序仅适用于数值( int ),不适用于 varchar,char

您的category_id应为数字,否则您需要将值转换为数字。

答案 5 :(得分:-2)

好吧,你没有设置任何ORDER BY条款。