несколько критериев поиска - PullRequest
3 голосов
/ 01 декабря 2008

Я использую следующий запрос, но в настоящее время мне нужно ввести значение в каждом параметре, чтобы запрос работал. Есть ли способ сделать параметры необязательными, чтобы 1 или более значений возвращали результат?

SELECT * FROM film
WHERE day LIKE '%day%'
AND month LIKE '%month%'
AND year LIKE '%year%'

что-то вроде

 function queryData(year,month,day) 

 declare Y

 if year == nothing
     Y = '%'
 else
     Y = '%' + year + '%'

 declare M

 if month == nothing
     M = '%'
 else
     M = '%' + month + '%'

 declare D

 if day == nothing
     D = '%'
 else
     D = '%' + day + '%'

 return result of :

 SELECT * FROM film
 WHERE day LIKE D
 OR month LIKE M
 OR year LIKE Y

Ответы [ 7 ]

1 голос
/ 01 декабря 2008

Почему бы вам не создать свой запрос динамически? В зависимости от ваших параметров, добавьте фильтры динамически.

например:.

string query = "SELECT * FROM film";
string paramenters = string.empty;

if(day!= string.empty)
  parameters = " Where day LIKE '%day%'";

if(month != string.empty)
{
  if(parameters != string.empty)
     parameters += "AND month LIKE '%month%'";
  else
     parameters = "WHERE month LIKE '%month%'";
}

и т. Д.

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

0 голосов
/ 11 октября 2011

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

SELECT * FROM film
WHERE (:daysearch is null or day LIKE :daysearch)
AND (:monthsearch is null or month LIKE :monthsearch)
AND (:yearsearch is null or year LIKE :yearsearch)

Хотя мне интересно, есть ли снижение производительности в базе данных.

0 голосов
/ 01 декабря 2008

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

if year == nothing
   Y = ''
else
   Y = '%' + year + '%'
0 голосов
/ 01 декабря 2008

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

day = ""
month = "dec"
year = "2008"

сделает ваш запрос:

SELECT * FROM film
WHERE day LIKE '%%'
AND month LIKE '%dec%'
AND year LIKE '%2008%'

'%%' должно соответствовать любой строке, если она не NULL.

0 голосов
/ 01 декабря 2008

Я бы сделал значение по умолчанию для каждого параметра в%, когда кто-то заполнит параметр, я передам% value%

0 голосов
/ 01 декабря 2008

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

0 голосов
/ 01 декабря 2008
SELECT * FROM film
WHERE day LIKE '%day%'
OR month LIKE '%month%'
OR year LIKE '%year%'

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

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