我有1个输入字段供用户输入商家名称,城市和州或邮政编码。我希望能够撤回正确的数据,但现在我得到不正确的结果。试图编写查询来查看业务和地址信息
例如,如果有人搜索“ERICS”,它会返回正常,但如果有人搜索“ERICS ROCHESTER MN”,它将返回ROCHESTER,MN的所有结果。我希望它在这种情况下不返回任何结果。顺便说一句,我解析出数据,所以我在查询中传递了多达4个值。商业名称,城市,州,邮编。
如何修改我的查询,以便它能给我正确的结果?我可以以某种方式检查查询哪些变量不为空?
架构
业务
business_id | name | city | state | zip
1 TOMS ROCHESTER MN 55906
2 BILLYs MINNEAPOLIS MN 55555
3 ERICS LAX WI 11111
评级
business_rating
br_id | business_id | rating_id
1 1 1
2 1 2
select b.business_id,
b.name,
b.city,
b.state,
b.zip
count(br.business_id) num_ratings,
round(avg(br.quality_id),2) quality_rating,
round(avg(br.friendly_id),2) friendly_rating,
round(avg(br.professional_id),2) professional_rating
from business b
Left Join business_rating br
On br.business_id = b.business_id
Left Join rating r
On r.rating_id = br.quality_id
And r.rating_id = br.friendly_id
where (upper(b.business_name) like '%ERICS%'
and upper(b.city) like '%ROCHESTER%'
and upper(b.state) like '%MN%'
and upper(b.zip) like '')
or (upper(b.city) like '%ROCHESTER%'
and upper(b.state) like '%MN%'
and upper(b.zip) like '')
or (upper(b.city) like '%ROCHESTER%'
and upper(b.state) like '%MN%')
or (upper(b.zip) like '')
group by id
我会看看solr。我也想到了4种不同的查询,但我宁愿将它放在1中。有一种方法可以做到这一点。 – Catfish 2011-06-02 23:58:44
我最终解析了数据,然后创建了4个不同的where子句并将它们设置为一个变量。根据我传递给该方法的任何变量,确定我在哪里使用了从句。 – Catfish 2011-06-20 19:05:49