Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.05.2001, 17:35
|
|||
|---|---|---|---|
Отсеивание по условию |
|||
|
#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, 22:26
|
|||
|---|---|---|---|
Отсеивание по условию |
|||
|
#18+
WHERE LangID=@LangID AND CountryID = case when @CountryID =0 then CountryID when @CountryID <>0 then @CountryID Хотя может быть отцы предложат что-нибудь более изящное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.05.2001, 08:55
|
|||
|---|---|---|---|
Отсеивание по условию |
|||
|
#18+
Наверное, если условие не определено, то оно NULL, соответственно: WHERE LangID=ISNULL(@LangID,LangId) AND CountryID=ISNULL(@CountryID,CountryId) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.05.2001, 09:48
|
|||
|---|---|---|---|
Отсеивание по условию |
|||
|
#18+
Спасибо! Вариант с case работает как раз так, как нужно! Но в связи с этим один вопрос: а насколько расточительна в плане ресурсов сервера проверка поля с самим собой (CountryID=CountryID)? И работает ли быстрей инструкция DELETE, удаляющая ненужные строки из временной таблицы? Но вопрос чисто умозрительный, поскольку все работает отлично и с использованием case... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1826737]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 367ms |

| 0 / 0 |
