Как заказать 1,2,3 не 1, 10, 11, 12 в MySQL - PullRequest
29 голосов
/ 02 декабря 2009

Следующий код выводит в порядке 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');

Заранее спасибо.

Ответы [ 6 ]

59 голосов
/ 02 декабря 2009

Сначала добавьте заказ по пункту в конце:

ORDER BY category_id

Если category_id является строкой, то вы должны рассматривать ее как целое число. Есть несколько способов сделать это. Я обычно добавляю ноль. Вы также можете разыграть его.

ORDER BY category_id + 0
10 голосов
/ 02 декабря 2009

Вы можете выполнить явное приведение, выполнив:

ЗАКАЗ ПО БЕРЕГУ (category_id КАК НЕ ПОДПИСАНО INTEGER)

Но вам следует пересмотреть структуру базы данных, поскольку поле, содержащее только числовые значения, также должно иметь числовой тип.

С наилучшими пожеланиями, Fabian

8 голосов
/ 24 марта 2017

Как упоминалось ранее, MySQL не поддерживает алфавитно-цифровую сортировку. Один из распространенных способов решить эту проблему - сначала упорядочить по длине:

ORDER BY LENGTH(column_name), column_name

До тех пор, пока нецифровая часть значения имеет одинаковую длину, она будет сортировать 1 до 10, 10 до 100 и т. Д.

6 голосов
/ 02 декабря 2009

Убедитесь, что столбец с 1,2,3,4 имеет тип INT, если это TEXT, вы не получите числовой порядок, а то, что вы описываете 1, 10, 11, 2, 22, 23 31 и т. Д .;

И, как уже упоминалось, используйте ORDER BY

0 голосов
/ 16 мая 2016

Заказ по работает только для числовых значений ( int ), не работает для varchar, char

Ваш category_id должен быть числовым, в противном случае вам нужно привести значения к числовому.

0 голосов
/ 02 декабря 2009

Ну, вы не устанавливаете ORDER BY предложение.

...