2012-09-21 37 views
0

我正在開發一個搜索功能來按照他們的地址(即通過郵政編碼(郵編)或按名稱或按城市)搜索經銷商。用戶將僅被提供一個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'匹配我想要按升序對結果進行排序的名字。我怎樣才能做到這一點?

+0

好像你需要有人爲你做 – user1406062

+0

與文本字段一起添加單選按鈕或組合框中選擇自己所擁有的輸入,無論是名字,郵政編碼等等,這取決於你可以排序 – FirmView

+0

發佈你的表結構和一些數據來測試。還有一些查詢從頭開始。這是作業嗎? – Yaroslav

回答

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 
+0

非常感謝您的回覆,您的回答真的節省了我的一天 – user964147

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`" 

我不使用甲骨文,但我認爲這是一樣的。 (這段代碼假定zip是一個varchar,如果它是一個整數值,只是刪除'')

+0

除了不使用列名前 – user1406062

+0

Thx作爲信息之前的(')字符,Oracle具有相同的表示法。 –

+0

我認爲名字,LIKE可以被認爲是 – FirmView