以下代码按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');
提前致谢。
答案 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
条款。