多个搜索条件

时间:2008-12-01 12:32:27

标签: mysql

我正在使用以下查询,但我目前必须在每个参数中输入一个值才能使查询生效。有没有办法使参数可选,这样一个或多个值将返回结果?

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 个答案:

答案 0 :(得分:1)

为什么不动态创建查询? 根据您拥有的参数,动态附加过滤器。

e.g:

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获得的额外结果。

答案 1 :(得分:0)

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

您仍将提供所有三个参数,但如果它们为空或NULL则无关紧要,匹配仍将从非空白的那些返回。

答案 2 :(得分:0)

使用OR而不是AND更改查询的逻辑。它不会使参数成为可选参数。要走的路不是使用你没有使用的参数。我不知道其他任何方式。

答案 3 :(得分:0)

我会将每个参数的默认值设为%,当有人填写参数时,我会传递%value%

答案 4 :(得分:0)

我没有测试过,但只要你确保未使用的参数是空字符串,你的查询看起来就应该有效。 e.g。

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

会进行查询:

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

'%%'应匹配任何字符串,只要它不是NULL。

答案 5 :(得分:0)

感谢您的帮助,我结束了以下的实施。是一种享受

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

答案 6 :(得分:0)

如果您希望进行非动态查询,则可以使用以下内容:

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)

虽然,我确实想知道数据库是否有性能损失。