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