Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询用户选择的过滤器_Sql_Sql Server_Database_Ado.net - Fatal编程技术网

Sql 查询用户选择的过滤器

Sql 查询用户选择的过滤器,sql,sql-server,database,ado.net,Sql,Sql Server,Database,Ado.net,我正在制作一个工作门户,用户可以通过关键字、工作类别、地点和薪资范围来搜索工作,公司名称……我希望,如果用户只选择一个选项并开始搜索,那么他将获得属于该特定选项的所有结果……如果用户选择多个选项,则结果应根据该选项进行过滤……因此,我无法查询数据……我只希望搜索应仅由这些选项进行用户提供的参数…未提供值的其他参数不应作为搜索/查询的一部分 这是我想做的一个糟糕的例子…这个查询只是为了给你一个想法。。。这是不对的 SELECT employer.phone, employer.mob

我正在制作一个工作门户,用户可以通过关键字、工作类别、地点和薪资范围来搜索工作,公司名称……我希望,如果用户只选择一个选项并开始搜索,那么他将获得属于该特定选项的所有结果……如果用户选择多个选项,则结果应根据该选项进行过滤……因此,我无法查询数据……我只希望搜索应仅由这些选项进行用户提供的参数…未提供值的其他参数不应作为搜索/查询的一部分

这是我想做的一个糟糕的例子…这个查询只是为了给你一个想法。。。这是不对的

SELECT        employer.phone, employer.mobile, employer.company, employer.country, employer.state, employer.city, employer.address, jobs.title, jobs.category, jobs.salary, 
                         jobs.skills, jobs.contactPerson, jobs.exper, jobs.email AS Expr1, jobs.jobsummary, jobs.posteddate
FROM            employer INNER JOIN
                         jobs ON employer.id = jobs.empid
WHERE        (jobs.skills LIKE '%' + @keyword + '%') OR
                         (employer.city LIKE '%' + @location + '%') OR
                         (employer.state LIKE '%' + @location + '%')

您可以使用这种方法

SELECT        employer.phone, employer.mobile, employer.company, employer.country, employer.state, employer.city, employer.address, jobs.title, jobs.category, jobs.salary, 
                         jobs.skills, jobs.contactPerson, jobs.exper, jobs.email AS Expr1, jobs.jobsummary, jobs.posteddate
FROM            employer INNER JOIN
                         jobs ON employer.id = jobs.empid
WHERE        (jobs.skills LIKE '%' + @keyword + '%' OR @keyword is null)
              AND (employer.city LIKE '%' + @location + '%' OR @location is null) 
              AND (employer.state LIKE '%' + @location + '%' OR @location is null)

但请记住,这可能会导致糟糕的执行计划,最好为不同的搜索变体创建单独的过程。

您可以使用这种方法

SELECT        employer.phone, employer.mobile, employer.company, employer.country, employer.state, employer.city, employer.address, jobs.title, jobs.category, jobs.salary, 
                         jobs.skills, jobs.contactPerson, jobs.exper, jobs.email AS Expr1, jobs.jobsummary, jobs.posteddate
FROM            employer INNER JOIN
                         jobs ON employer.id = jobs.empid
WHERE        (jobs.skills LIKE '%' + @keyword + '%' OR @keyword is null)
              AND (employer.city LIKE '%' + @location + '%' OR @location is null) 
              AND (employer.state LIKE '%' + @location + '%' OR @location is null)

但请记住,这可能会导致执行计划不正确,最好为不同的搜索变量创建单独的过程。

在where子句中使用
逻辑,并将未使用的变量设置为空,所有操作都将正常进行:如果
@keywords
为空,
(jobs.skills,如“%”)
将匹配所有
作业。技能

在where子句中使用
逻辑,并将未使用的变量设置为空,所有操作都将正常运行:如果
@keywords
为空,
(jobs.skills,如“%”)将匹配所有
作业。技能

尝试类似
的操作(@keyword为NULL或job.skills,如…
)并将NULL绑定到@keyword(如果它不是选定的参数)尝试类似于
(@keyword为NULL或job.skills,如…
)的操作,并将NULL绑定到@keyword(如果它不是选定的参数)