Каков наилучший способ обработки нескольких вариантов поиска? - PullRequest
2 голосов
/ 10 августа 2009

Вероятно, это вопрос, который существует уже 20 лет, но я все равно собираюсь его задать. У меня есть экран с несколькими вариантами поиска. Некоторые могут быть объединены. Некоторые являются эксклюзивными.

Пример:

Поиск по имени и фамилии

OR

Поиск по возрасту

Какой лучший способ справиться с этим? Должен ли я справиться с этим в приложении и либо вызвать 1 из множества функций, либо 1 функцию с целой связкой if / else. Выполнение серии if / else просто кажется устаревшим. Разве нет более эффективного способа?

Ответы [ 2 ]

2 голосов
/ 10 августа 2009

Я рекомендую использовать конструктор для сбора различных предикатов в объект, а затем передать этот объект в функцию / метод, который генерирует соответствующий запрос.

Java-библиотека SQLORM использует этот подход для построения запросов SQL объектно-ориентированным способом. Эта страница содержит хорошее обсуждение плюсов и минусов построения строки запроса с использованием метода с большим количеством операций if-else по сравнению с подходом компоновщика.

0 голосов
/ 10 августа 2009

Я бы проверил, какие поля могут быть заполнены вместе во внешнем интерфейсе.

Для хранимого процесса основная цель - не иметь SQL с конкатонациями в нем.

В sproc я склонен использовать строку операторов isnull для этого, чтобы использовать параметр или значение поля, если параметр равен нулю.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...