4

私は自分の Web サイト (ソーシャル ネットワーキング Web サイト) で簡単な検索を構築しようとしています。サイトに登録されているすべてのユーザーを検索し、提案のリストを返したいと考えています (これがこのクエリの目的であり、提案リストです)。 )。

検索したいテーブルには、userIDfname、の列がありますlname

最後の 2 列 (2 つの名前) を検索し、検索語に一致する名前の順にそれらを返したいと考えています。

実行するクエリの最初の部分は次のようになります。

SELECT userID, fname, lname FROM names WHERE

でも残りは、助けが必要です。

編集: このクエリを使用して検索します:

SELECT userID, fname, lname FROM names WHERE fname LIKE '%".$term."%' OR lname LIKE '%".$term."%'

一致が最初にあるもので結果がソートされるようにどのように並べ替えることができるので、入力Mすると返さMarkれる前に、adam

4

5 に答える 5

3

あなたが試すことができます

SELECT userID, fname, lname,
myRank = CASE WHEN fname = @term THEN 4 
WHEN fname like @term + '%' THEN 3
WHEN fname like '%' + @term + '%' THEN 2
ELSE.... whatever ranking you want
FROM names 
WHERE fname LIKE '%' + @term + '%' 
   OR lname LIKE '%' + @term + '%'
ORDER BY myRank DESC
于 2012-11-11T04:41:08.500 に答える
1

名前の全文検索の使用を検討する必要があります。全文検索により、一致の類似性を考慮することができます。

于 2012-11-11T03:09:09.747 に答える
0

最近、同様の問題が発生し、Microsoft MasterDataServicesが提供する類似性機能を使用しました。そこから始めて、単語ベースのトリグラム関数を実装しました。私の実装は、「スポンジボブスクエアパンツ」と「スクエアレパント、ボブ」を一致させます。

Visual Studio(sql-serverで使用されるアセンブリを作成するために必要)を所有していない場合は、ネイティブT-SQLを使用して目的の機能(あいまい文字列の一致)を実装することもできます。素敵なツールキットはここにあります。

更新:注:類似性文字列の一致は、インクリメンタル検索ではうまく機能しません。つまり、「M」は「Mark」と一致しません。あいまい文字列の照合と「startswith」、「contains」などへの分類の組み合わせなど、他の試みを使用する必要があります。

于 2012-11-11T08:57:47.363 に答える
0

クエリステートメントの最後で ORDER BY fname ASC を実行できます (構文が DB ステートメントで機能する場合、ある種の SQL のように見えるので、そのようなものが機能するはずです)。これにより、名前がアルファベット順にソートされるため、Steve が Steven の前に表示されます (「n」がないため)。最初の文字または最初の数文字に基づいて何かを見つけたい場合は、おそらく M* を使用できる同等のものがあり、アスタリスクがワイルドカードになります。それが役立つことを願っています!

于 2012-11-11T04:01:09.357 に答える