如何在 mySQL 中排序 1,2,3 而不是 1, 10, 11, 12

问题描述 投票:0回答:6

以下代码按照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');

提前致谢。

mysql sql-order-by
6个回答
80
投票

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

ORDER BY category_id

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

ORDER BY category_id + 0

24
投票

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

ORDER BY LENGTH(column_name), column_name

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


14
投票

您可以通过以下方式进行显式转换:

ORDER BY CAST(category_id AS UNSIGNED INTEGER)

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

最美好的祝愿, 法比安


6
投票

确保保存1,2,3,4的列是

INT
类型,如果是TEXT,你将不会得到数字顺序,而是你所描述的1,10,11,2,22,23,31等;

就像其他人提到的那样,使用

ORDER BY


0
投票

Order by 仅适用于数值(intdecimal、...),不适用于 varcharchar

你的category_id应该是数字,否则你需要将数据转换为其数值。


-2
投票

好吧,您没有设置任何

ORDER BY
子句。

© www.soinside.com 2019 - 2024. All rights reserved.