Подтвердить что ты не робот

Как заказать 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');

Спасибо заранее.

4b9b3361

Ответ 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.