Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отсеивание по условию
|
|||
|---|---|---|---|
|
#18+
Добрый день, отцы! В общем, есть у меня проблема, как решить - пока не додумался. Суть: есть форма с критериями поиска в базе. Практически все поля необязательны (можно выбрать опцию "неважно"). Что я делаю в процедуре: допустим, пользователь выбрал в поле "Страна" - "неважно" (значение "0"). В процедуре я отбираю во временную таблицу все страны, и, если критерий выборки по стране не равен "ноль" ( то есть выбрана конкретная страна), удаляю из временной таблицы ненужные страны. Сильно подозреваю, что этот путь не самый лучший, но вот как сделать так, чтобы сразу выбирать нужные записи? Что-то типа: SELECT CountryName FROM CountryList WHERE LangID=@LangID AND (IF(@CountryID<>0) CountryID=@CountryID ) где @LangID - идентификатор языка, на котором запрашивают список, а CountryID - тот самый опциональный параметр... То есть сравнение на больше(CountryID>@CountryID) не пойдет, поскольку может быть выбрана конкретная страна (CountryID=@CountryID)... К сожалению, вышеприведенная конструкция запроса по сути абсурдна... А вот как все-таки? Ума не хватает у меня... И знания тонкостей T-SQL... Прошу поделиться опытом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2001, 17:35 |
|
||
|
Отсеивание по условию
|
|||
|---|---|---|---|
|
#18+
WHERE LangID=@LangID AND CountryID = case when @CountryID =0 then CountryID when @CountryID <>0 then @CountryID Хотя может быть отцы предложат что-нибудь более изящное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2001, 22:26 |
|
||
|
Отсеивание по условию
|
|||
|---|---|---|---|
|
#18+
Наверное, если условие не определено, то оно NULL, соответственно: WHERE LangID=ISNULL(@LangID,LangId) AND CountryID=ISNULL(@CountryID,CountryId) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2001, 08:55 |
|
||
|
Отсеивание по условию
|
|||
|---|---|---|---|
|
#18+
Спасибо! Вариант с case работает как раз так, как нужно! Но в связи с этим один вопрос: а насколько расточительна в плане ресурсов сервера проверка поля с самим собой (CountryID=CountryID)? И работает ли быстрей инструкция DELETE, удаляющая ненужные строки из временной таблицы? Но вопрос чисто умозрительный, поскольку все работает отлично и с использованием case... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2001, 09:48 |
|
||
|
|

start [/forum/search_topic.php?author=anthon&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 1100ms |
| total: | 1208ms |

| 0 / 0 |
