Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2011, 17:04   #1
AMDemon
Пользователь
 
Регистрация: 14.11.2011
Сообщений: 15
По умолчанию Сортировка в выражении SELECT

Здравствуйте!

Встала передо мной задача, не знаю как к ней подступиться.

Есть запрос (для примера):

select * from client
where client_id in (113, 115, 108)

Мне нужно, чтобы в результате выборки, строки были отсортированы по client_id именно в порядке (113, 115, 108). Это вообще реально сделать?
AMDemon вне форума Ответить с цитированием
Старый 14.11.2011, 18:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Имейте для этого другой реквизит, в котором содержится, например, порядковый номер записи, по нем и сортируйте, а напрямую по client_id не получится.

Код:
NomPP client_id
1       113
2       115
3       108
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2011, 00:19   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, +1 /* как всегда, впрочем! */

Цитата:
строки были отсортированы по client_id именно в порядке (113, 115, 108).
Вы не сказали, что за СУБД.
Можно дополнительный аттрибут создать через CASE WHEN THEN END и сортировать по нему.

а можно и так поступить:
Код:
select * from client
where client_id =113
union 
select * from client
where client_id =115
union 
select * from client
where client_id = 108
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2011, 08:14   #4
AMDemon
Пользователь
 
Регистрация: 14.11.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Имейте для этого другой реквизит, в котором содержится, например, порядковый номер записи, по нем и сортируйте
Не выйдет. Подробнее ситуация выглядит так: есть прога, в ней поле, в которое заносится несколько номеров через запятую. Эти номера подставляются в (... and field_in_query in (field_at_the_form) and ...). Оператор хочет, чтобы выборка была именно в том порядке, в котором он заносит номера в проге. И у него есть на это основания, ибо это существенно облегчит ему жизнь.
Если только сначала инсертить номера в отдельную таблицу, потом подсоединять её и с помощью неё сортировать... Тоже идея, в принципе.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы не сказали, что за СУБД.
А разве есть разница? Подскажите хоть для какой-нибудь, а там уже посмотрим. Вообще MS SQL Server 2008.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
через CASE WHEN THEN END
Сложность запроса нереальная получится...

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
select * from client
where client_id =113
union
select * from client
where client_id =115
union
select * from client
where client_id = 108
Аналогично. Там в запросе не одна таблица, а около 15-ти, в некоторых сотни тысяч записей. С такими конструкциями я просто базу повешу. Это не выход из ситуации.
AMDemon вне форума Ответить с цитированием
Старый 15.11.2011, 09:31   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select * from client
inner join ( -- запрос формируемый на основе данных оператора
             select 1 as  ord, 113 as val 
       union select 2 as  ord, 115 as val   
       union select 3 as  ord, 108 as val 
            ) ordlist on client.vla =ordlist.val
order by ordlist.ord
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.11.2011, 10:13   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Если только сначала инсертить номера в отдельную таблицу, потом подсоединять её и с помощью неё сортировать
А вы сами себе и ответили. Сделать процедурку, которая во временную табличку загоняет поидешно разобранное условие, в основном запросе дергать из нее порядковый номер. Пожалуй оптимальтней и не придумаешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2011, 13:13   #7
AMDemon
Пользователь
 
Регистрация: 14.11.2011
Сообщений: 15
По умолчанию

Я вообще думал, что есть нормальный, предусмотренный разрабами sql механизм для сортировки по множеству в in (...)
AMDemon вне форума Ответить с цитированием
Старый 15.11.2011, 14:09   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я вообще думал, что есть нормальный, предусмотренный разрабами sql механизм для сортировки по множеству в in (...)
думаю, что кроме Вас (точнее вашего оператора) такой механизм никому не нужен.
поэтому его и нет.

А чем не понравилось решение от evg_m ?!
мне понравилось!
Просто, понятно, наглядно, эффективно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2011, 14:56   #9
AMDemon
Пользователь
 
Регистрация: 14.11.2011
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
думаю, что кроме Вас (точнее вашего оператора) такой механизм никому не нужен.
поэтому его и нет.
Может и такое случиться.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А чем не понравилось решение от evg_m ?!
мне понравилось!
Просто, понятно, наглядно, эффективно.
Хорошее решение, не спорю. Пробую...
AMDemon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В зависимости от выбора в Select изменить значения другого Select Tayfun HTML и CSS 3 18.08.2011 00:05
Select t1.N,t1.FIO,(select t2.acc from t2 where t2.type=1) from t1,t2 mavlon_m SQL, базы данных 2 17.09.2009 15:28
ошибка в выражении mod Alkagolik Паскаль, Turbo Pascal, PascalABC.NET 6 03.08.2009 01:19
Ошибка в выражении fike Microsoft Office Access 2 01.11.2008 22:58
Передача значения в <select></select> kkkggg Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 06.09.2007 00:26