Как заказать 1,2,3 не 1, 10, 11, 12 в mySQL
Следующий код выводит в порядке 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');
Спасибо заранее.
Ответы
Ответ 1
Сначала добавьте предложение order by в конец:
ORDER BY category_id
Если category_id является строкой, вы должны рассматривать ее как целое. Есть несколько способов сделать это. Я обычно добавляю ноль. Вы также можете бросить его.
ORDER BY category_id + 0
Ответ 2
Убедитесь, что столбец, который содержит 1,2,3,4, имеет тип INT
, если он ТЕКСТ, вы не получите числовой порядок, но то, что вы описываете 1, 10, 11, 2, 22, 23, 31 и т.д.
И, как упоминалось выше, используйте ORDER BY
Ответ 3
Вы можете сделать явное приведение:
ORDER BY CAST (category_id AS UNSIGNED INTEGER)
Но вы должны пересмотреть свой макет базы данных, поскольку поле, содержащее только числовые значения, должно также иметь числовой тип.
С наилучшими пожеланиями,
Fabian
Ответ 4
Заказ работает только для числовых значений (int), а не для varchar, char
Ваша category_id должна быть численной, в противном случае вам нужно отличать значения до числовых.
Ответ 5
Как упоминалось ранее, MySQL не поддерживает буквенно-цифровую сортировку. Один общий прием для решения этого вопроса - это первый порядок по длине:
ORDER BY LENGTH(column_name), column_name
Пока нечисловая часть значения имеет одинаковую длину, это будет сортировать 1 до 10, 10 до 100 и т.д.
Ответ 6
Ну, вы не устанавливаете какое-либо предложение ORDER BY
.