2011-12-18 6 views
0

Мне нужно найти объект в приложении.Запись поисковых запросов из приложения

Панель поиска состоит из 8 полей, и пользователь может заполнить любое поле, которое он хочет.

Должен ли я писать запросы для всех возможных комбинаций или что это правильный способ сделать это?

ответ

1

Существует много способов добиться этого, хотя самым простым является использование dynamic SQL.

Это связано со стоимостью чтения, экспозицией SQL Injection и кэшированием и оптимизацией запросов.

Что касается того, где вы создаете динамическую строку SQL, вы можете сделать это в хранимой процедуре, если ваша база данных поддерживает те, что было бы моим предпочтением, поскольку вы могли бы передавать параметры и иметь этот бит дополнительной защиты от SQL Инъекции.

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

Основной метод будет строить различные части пункта WHERE для различных поисковых полей (возможно, начиная с WHERE 1 = 1, так что вы можете просто добавить AND положения без необходимости проверять каждый пункт, чтобы увидеть, если это первый один).

Я предлагаю прочитать статью dynamic SQL, с которой я связан.

+0

большие, я буду проверять его, ТНХ :) –

0

Классический способ сделать это

SELECT 
    <fields> 
FROM tablename 
WHERE 
    (field1 like '%[field1 user input]%' OR '[field1 user input]'='') 
    AND (field2 like '%[field2 user input]%' OR '[field2 user input]'='') 
    ... 
    AND (field8 like '%[field8 user input]%' OR '[field8 user input]'='') 

Каждый здравомыслящий оптимизатор запросов будет оптимизировать на ненужные условия

+0

, что если пользователь не сделал введите что-нибудь в некоторых полях, будет ли этот запрос получать правильные результаты? –

Смежные вопросы