|
|
|
| Есть такая таблица.
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 | |
|
|
|
|
|
|
|
для: vafir
(14.09.2010 в 11:30)
| | Можна так
SELECT * FROM object WHERE id_client = '2' ORDER BY LENGTH(object_name), object_name
|
| |
|
|
|
|
|
|
|
для: ADY
(14.09.2010 в 12:22)
| | Не подходит. Объекты с номерами сортирует нормально, а нормальные названия выстраиваются по длине, а не в алфавитном порядке | |
|
|
|