我正在开发一种搜索功能,通过他们的地址(即邮政编码(zip)或姓名或城市)为我的项目搜索经销商。将向用户提供仅一个html输入字段以输入搜索项(用户一次只能输入一个搜索项,即邮政编码或名称或城市(不允许组合))。开发查询的条件如下
有时,名称也可能包含邮政编码,在这种情况下,结果应该通过邮政编码缩短。
我试过这个
select city, postcode, name
from dealers
where name ='xyz' OR
postcode ='xyz' OR
city='XYZ'
ORDER BY postcode desc
但我希望每个条件都有'ORDER BY'。例如'xyz'匹配我想要按升序排序结果的名字。我怎么能这样做?
答案 0 :(得分:2)
如果所有条款按升序排序,生活会更容易。
我假设您的实际应用程序使用的是变量而不是硬编码字符串。所以解决方案看起来应该是这样的:
select city, postcode, name
from dealers
where name = p_search_term OR
postcode = p_search_term OR
city = p_search_term
ORDER BY case when postcode = p_search_term then p_search_term else 1 end desc
, case when name = p_search_term then p_search_term else city end asc
答案 1 :(得分:0)
在MySQL中你可以这样做:
"SELECT `zip`, `name`, `city` FROM `dealers` WHERE `zip` = '$zip' ORDER BY `zip` DESC"
"SELECT `zip`, `name`, `city` FROM `dealers` WHERE `name` = '$name' ORDER BY `name`"
"SELECT `zip`, `name`, `city` FROM `dealers` WHERE `city` = '$city' ORDER BY `city`"
我不使用Oracle,但我认为它是相同的。 (此代码假定zip是varchar,如果它是整数值,则只删除'')