Как сделать заказ по имени в MYSQL как с именем заказа в Window - PullRequest
0 голосов
/ 21 октября 2010

таблица Картинка со строками имеет название

1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg,10.jpg,11.jpg
select * from Picture order by name

MySQL заказ: 1.jpg,10.jpg,11.jpg,2.jpg,3.jpg,......

Проблема:

Я хочу отсортировать все типы имен, как в Window 1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg,10.jpg,11.jpg

и он должен работать с другим регистром как

flower01.jpg,flower02.jpg,flower031.jpg,....,flower10.jpg

пожалуйста, помогите мне

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

У вас есть 4 варианта.

  1. Измените имя на числовой тип и удалите .jpg (добавив его позже в коде)
  2. Добавить столбец 'order' и отсортировать по этому
  3. Сортировка в вашем коде, а не в SQL
  4. Использование приведенных «хаков» (например, CAST (ИМЯ НЕ ПОДПИСАНО)
1 голос
/ 21 октября 2010

Хакерский способ сделать это:

... ORDER BY CAST(name AS UNSIGNED);

Редактировать : альтернатива будет:

 ... ORDER BY LPAD(name,N,'0');

Где N - максимальная ширина вашего столбца. К сожалению, MySQL не поддерживает естественную сортировку изначально AFAIK.

0 голосов
/ 21 октября 2010

ODER BY name видит, что name является строкой, и сортирует ее соответственно, символ за символом.Вы должны заставить MySQL интерпретировать имя как числовое значение.Путь может быть примерно таким:

select * from Picture order by name * 1;
...