以下代码按照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');
提前致谢。
首先在最后添加一个order by子句:
ORDER BY category_id
如果category_id是字符串,那么您必须将其视为整数。有几种方法可以做到这一点。我通常会加一个零。也可以投。
ORDER BY category_id + 0
如前所述,MySQL 不支持字母数字排序。解决这个问题的一个常见技巧是首先按长度排序:
ORDER BY LENGTH(column_name), column_name
只要值的非数字部分长度相同,就会将 1 排在 10 之前,将 10 排在 100 之前,等等
您可以通过以下方式进行显式转换:
ORDER BY CAST(category_id AS UNSIGNED INTEGER)
但是您应该重新考虑数据库布局,因为仅包含数值的字段也应该是数字类型..
最美好的祝愿, 法比安
确保保存1,2,3,4的列是
INT
类型,如果是TEXT,你将不会得到数字顺序,而是你所描述的1,10,11,2,22,23,31等;
就像其他人提到的那样,使用
ORDER BY
Order by 仅适用于数值(int、decimal、...),不适用于 varchar、char 等
你的category_id应该是数字,否则你需要将数据转换为其数值。
好吧,您没有设置任何
ORDER BY
子句。