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

shi*_*hin 30 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');
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Sco*_*ers 64

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

ORDER BY category_id
Run Code Online (Sandbox Code Playgroud)

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

ORDER BY category_id + 0
Run Code Online (Sandbox Code Playgroud)


hal*_*dan 10

你可以做一个明确的演员:

按CAST排序(category_id AS UNSIGNED INTEGER)

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

祝愿,费边


And*_*röm 9

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

ORDER BY LENGTH(column_name), column_name
Run Code Online (Sandbox Code Playgroud)

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


Jak*_*kub 6

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

和其他提到的一样,使用 ORDER BY


jen*_*ram -2

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