查询用户选择的过滤器

时间:2012-02-29 08:50:18

标签: sql sql-server database ado.net

我正在创建一个工作门户网站,用户可以通过关键字,工作类别,位置工资范围,公司名称来搜索工作.....我希望如果用户只选择一个选项并开始搜索,那么他将获得所有工作属于该特定选项的结果....如果用户选择多个选项,则应根据该结果过滤结果...所以这里我无法查询数据....我只是想要进行搜索只有那些由用户提供的参数...其他未提供其值的参数不应该是搜索/查询的一部分......

这是我想要做的一个不好的样本....这个查询只是为了给你一个想法...这是不正确的

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 + '%')

2 个答案:

答案 0 :(得分:1)

在where子句中使用AND逻辑,并将未使用的变量设置为空白,一切正常:如果@keywords为空,(jobs.skills LIKE '%%')将匹配所有jobs.skills

答案 1 :(得分:0)

您可以使用此方法

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)

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

相关问题