数据库查询使用地址进行搜索

时间:2012-09-21 22:23:23

标签: sql oracle

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

  1. 当用户按邮政编码搜索时,匹配的结果应按降序显示
  2. 当用户按名称匹配搜索结果时,应按字母顺序显示
  3. 与城市名称相同
  4. 有时,名称也可能包含邮政编码,在这种情况下,结果应该通过邮政编码缩短。

    我试过这个

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

    但我希望每个条件都有'ORDER BY'。例如'xyz'匹配我想要按升序排序结果的名字。我怎么能这样做?

2 个答案:

答案 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,如果它是整数值,则只删除'')