0

我正在为我的项目开发一种搜索功能,以通过他们的地址(即按邮政编码(zip)或按名称或按城市)搜索经销商。将只为用户提供一个 html 输入字段来输入搜索词(用户一次只能输入一个搜索词,即邮政编码或姓名或城市(不允许组合))。开发查询的条件如下

  1. 用户按邮政编码搜索时,匹配结果应按降序显示
  2. 当用户按名称搜索时,匹配结果应按字母顺序显示
  3. 与城市名称相同

有时,名称也可能包含邮政编码,在这种情况下,结果应该用邮政编码缩短。

我试过这样

select city, postcode, name
  from dealers
  where name ='xyz' OR
        postcode ='xyz' OR
        city='XYZ'
  ORDER BY postcode desc

但我希望每个条件都使用“ORDER BY”。例如,“xyz”匹配第一个名字我想按升序对结果进行排序。我怎样才能做到这一点?

4

2 回答 2

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
于 2012-09-22T21:39:01.637 回答
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,如果它是一个整数值,只需删除 ' ')

于 2012-09-21T22:32:42.893 回答