2016-05-18 6 views
-2

私が持っているが、次の順序で表示されるはずです:ソート順SQL

  1. 完全一致は、最初
  2. が表示されます
  3. テキスト文字列の先頭からの部分一致
  4. テキスト文字列内の部分一致** **

、ユーザが検索文字列を入力すると、 "を描く" 結果は次のようにする必要があります - 任意の助けをいただければ幸いです

Paint Expense 
Painting Supplies 
Building Maintenance - Painting 

+0

があなたの意図したテーブル構造は何ですか?どの言語を使用していますか?結果はどのように表示されるべきですか(ウェブページ/アプリケーション/何でも)?これまでに何を試しましたか? – dhke

+0

@dhke私はこのためにPHPを使用しています。テーブル構造はid、account_number、account_nameのように単純です。私は "塗装"それはaccount_nameフィールドに格納されている3つの項目の上にリストする必要があります入力すると、私は完全なsearchboxを持っています。 – 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 ...'のような完全一致です。

第2:'paint...'

第3:'...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