2016-05-18 274 views
-2

我應該按以下順序顯示:排序順序SQL

  1. 精確匹配應顯示第一
  2. 從文本字符串開始的部分匹配
  3. 部分匹配文本字符串中的任意位置**

如果用戶輸入搜索字符串 「」 結果應該是像 -

Paint Expense 
Painting Supplies 
Building Maintenance - Painting 

任何幫助,將不勝感激。

+0

什麼是你的意圖表結構?你在用什麼語言?應該如何顯示結果(網頁/應用程序/無論)?你試過什麼了? – dhke

+0

@dhke我爲此使用PHP。表結構很簡單,如id,account_number和account_name字段。當我輸入「paint」時,我有自動完成搜索框,它應該列出存儲在account_name字段中的3個以上的項目。 – Abhijit

+0

嗨,這個問題不適合這個網站,因爲它沒有列出你在代碼中遇到的特定問題,也可能有其他人可能與他們有關。相反,它讀起來像是要求某人爲你寫一些代碼;它會作爲自由職業者網站上的工作規範工作,但您希望有人免費提供給您。 – IMSoP

回答

0

這是SQL Server但你可以簡單的將其更改爲PostrgeSQL

DECLARE @f VARCHAR(MAX) = 'paint' 

DECLARE @t TABLE (v VARCHAR(MAX)) 
INSERT INTO @t 
VALUES ('Building Maintenance - Painting'), 
     ('Paint Expense'), 
     ('Painting Supplies') 


SELECT * , 
     CASE WHEN (v LIKE @f + ' %' 
        OR v LIKE '% ' + @f 
        OR v LIKE '% ' + @f + ' %' 
       ) THEN 1 
      WHEN v LIKE @f + '%' THEN 2 
      WHEN v LIKE '%' + @f + '%' THEN 3 
      ELSE 4 
     END AS ordering 
FROM @t 
ORDER BY ordering 

輸出:

v         ordering 
Paint Expense      1 
Painting Supplies     2 
Building Maintenance - Painting 3 

第一種是像'paint ...''... paint''... paint ...'精確匹配。第二個:'paint...'。第三個:'...paint...'

您也可以在order條款直接做到這一點:

SELECT * 
FROM @t 
ORDER BY CASE WHEN (v LIKE @f + ' %' 
        OR v LIKE '% ' + @f 
        OR v LIKE '% ' + @f + ' %' 
        ) THEN 1 
       WHEN v LIKE @f + '%' THEN 2 
       WHEN v LIKE '%' + @f + '%' THEN 3 
       ELSE 4 
     END 
+0

謝謝,請試試看:) – Abhijit