2012-01-10 25 views
1

私は次のように構築SQLの検索機能があります、SQLの検索機能

SELECT 
    * 
FROM 
    Table 
WHERE 
    Question LIKE @SearchString 
    OR Answer LIKE @SearchString 
    OR Keywords LIKE @SearchString 

をそして、私が上に@SearchString LIKE結果どこキーワードを意味し、関連性によってそれらを注文したいです続いてAnswer LIKE @SearchStringを実行し、次に質問LIKE @SearchStringを実行します。しかし、私はいくつかのグーグルの努力にもかかわらずどのように把握していないようです。

は、私がどこか

ORDER BY 
    CASE 
     WHEN CHARINDEX(FAQ_FAQ.Keywords, @SearchString, 1) > 0 THEN 0 
    ELSE 1 
END ASC, 

が働くかもしれないことがわかったが、どうやらそれはしていません。あなたも限り、このようにそれを取ることができる

SELECT 
    * 
FROM 
    Table 
WHERE 
    Question LIKE @SearchString 

union all 

SELECT 
    * 
FROM 
    Table 
WHERE 
    Answer LIKE @SearchString 

union all 

SELECT 
    * 
FROM 
    Table 
WHERE 
    Keywords LIKE @SearchString 

:あなたは常にUNION ALLルートを使用することができ、事前

答えて

3
SELECT 
    * 
FROM 
    Table 
WHERE 
    Keywords LIKE @SearchString 
    OR Answer LIKE @SearchString 
    OR Question LIKE @SearchString 
ORDER BY 
    CASE WHEN Keywords LIKE @SearchString THEN 0 
     WHEN Answer LIKE @SearchString THEN 1 
     ELSE 2 
    END 
+0

ベストプラクティスプランのための+1:p – Jordan

+0

これはトリックでした!どうも!前と同じようなことをしようとしましたが、何らかの理由で「好き」がエラーを出しました –

1

Thxを

select * 
from 
(
    SELECT 
     *, 1 as OrderRank 
    FROM 
     Table 
    WHERE 
     Question LIKE @SearchString 

    union all 

    SELECT 
     *, 2 as OrderRank 
    FROM 
     Table 
    WHERE 
     Answer LIKE @SearchString 

    union all 

    SELECT 
     *, 3 as OrderRank 
    FROM 
     Table 
    WHERE 
     Keywords LIKE @SearchString 
)a 
order by OrderRank 
+0

ユニオントリックを動作させるには、1,2,3のような擬似カラムを追加してから、新しい番号で並べ替えることができます。 – Randy

+0

@Randyそれはまさに私がやったことです:) –

+0

2番目または3番目の条件が2番目または3番目の条件と一致したときに表示されるテーブルの重複(または3重)行が気にしない。 –

0

あなたがはっきりと3つを選択することができます一緒に組み合わせると、あなたが探している結果が得られます。よりよい方法があるかもしれませんが、私はそれを認識していません。組合の仕方に精通していますか?

0

このようなものはありますか?

select * from (
    select 
     t.*, 
     case when Question LIKE @SearchString then 1 
      when Answer LIKE @SearchString then 2 
      when Keywords LIKE @SearchString then 3 
     end crit 
    from table t 
) where crit > 0 
order by crit