Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с сортировкой
 
 автор: vafir   (14.09.2010 в 11:30)   письмо автору
 
 

Есть такая таблица.
id id_client object_name
1 1 Просвещения
2 2 №34
3 1 Ленинский
4 2 №11
5 2 №2
6 2 №20
7 2 №107

SELECT * FROM object WHERE id_client = '1' ORDER BY object_name результат сортируется верно (Ленинский, Просвещения)
SELECT * FROM object WHERE id_client = '2' ORDER BY object_name сортируется неверно (№107, №11, №2, №20, №34)

Для сортировки object_name, которые содержат "№" работает такой запрос:
SELECT * FROM object WHERE id_client = '2' ORDER BY substr( object_name, 2 )+0 // пропускаю первый символ и привожу строку к числу
Результат: (№2, №11, №20, №34, №107)
Но это запрос не позволяет правильно отсортировать object_name 1-го клиента

Соединив в один запрос
SELECT * FROM object WHERE id_client = '1' ORDER BY object_name
SELECT * FROM object WHERE id_client = '2' ORDER BY substr( object_name, 2 )+0
у меня получилось вот что:
SELECT * FROM object
WHERE id_client='$id_client'
ORDER BY case WHEN substr(object_name,1,1)='№' then substr(object_name,2)+0
else object_name
end
По идее должно работать, но соритровки object_name 2-го клиента так как хотелось бы не происходит. У первого все нормально.

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

  Ответить  
 
 автор: ADY   (14.09.2010 в 12:22)   письмо автору
 
   для: vafir   (14.09.2010 в 11:30)
 

Можна так

SELECT * FROM object WHERE id_client = '2' ORDER BY LENGTH(object_name), object_name

  Ответить  
 
 автор: vafir   (14.09.2010 в 12:55)   письмо автору
 
   для: ADY   (14.09.2010 в 12:22)
 

Не подходит. Объекты с номерами сортирует нормально, а нормальные названия выстраиваются по длине, а не в алфавитном порядке

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования