2014-10-28 4 views
0

У меня проблема с SQL-запросом. Я хочу, чтобы мои результаты сортировались в порядке возрастания, но проблема в том, что DB сортирует результаты только по первому рисунку, тогда как логически 2 должно быть до 19, например.SQL Order by ... ASC

Вот мой запрос и скриншот результата, который не идет на все:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY mail.titre ASC 

Very bad sort...

То, что я хочу, это все результаты отсортированы так: 1 2 3 4 5 .. 101 102 103 ... 8845 8850 ... и так далее.

У вас есть идея к этой проблеме?

С уважением.

+0

Я думаю, вы срежете часть с чувственными данными, но мне кажется, что ваши записи строка с данными, разделенных трубой charachter. Сначала вы должны взять только часть перед первым трубой и преобразовать ее в int или просто найти позицию «i» в трубе и объединить нули перед строкой и порядком в алфавитном порядке, где «n» является достаточно большим, чтобы создать итоговая строка больше любого значения, которое вы можете иметь в первом столбце. – BertuPG

ответ

1

Я думаю, что вы столбец декалирован как char. Таким образом, СУБД сортируется по строковому значению. Вы должны преобразовать свои значения в int в предложении sort.

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY convert(mail.titre, unsigned integer) ASC 
+0

Отлично, он работает правильно, спасибо большое! Я понял! ;) –

1

Насколько я могу видеть поле является VARCHAR/текст ... Так что правильно сортировать их, вы бы бросили поле (если это возможно)

Пример:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY CAST(mail.titre AS int) ASC 
+0

Очень хорошая идея! Я получил ошибку! : D –

3

не делаю. У вас есть столбец string/char [], и вы хотите, чтобы вы искали работы только по номерам. Вам нужно преобразовать этот столбец в число, если это возможно.

Вы можете использовать бросок:

CAST(mail.titre,int) 

Примеров здесь: Converting text column to integer in MySQL

+0

Хорошая идея, @Jens найти идеальный запрос, как и все, что вы говорили вам и Роберту! : D –