Каков наилучший способ обработки нескольких вариантов поиска?

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

Пример:

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

ИЛИ ЖЕ

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

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

2 ответа

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

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

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

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

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

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

Другие вопросы по тегам