2016-05-27 17 views
1

私はユーザーデータを保持するテーブルを持っています。そしてsqlを使用して複数のフィールドを検索する機能

Select * from Users where Name Like '% Al %' 
ORDER BY DIFFERENCE(Name , 'Al') desc; 

ID Name Surname Age 
1 Alice Moore 23 
2 David Moore 45 

唯一のフィールドで作業した場合は、その後、私は単にこのような何かを行うことができ、私は私の検索キーに使用する必要がありNameを、言うことができます:それは次のようになりますユーザー1のデータを取得してください。

検索操作で他のフィールドも考慮したい場合は、Surnameと言うと、どうすればよいかわかりません。

どのようにorder byは最終的にどの列を使用するかを知っているので、関連性に基づいてリストを返すことができます。

+0

サンプルデータ(これらの余分な列の少なくとも1つを含む)と予想される結果を追加します。 – jarlh

+0

@jarlh提案に感謝します。編集しました。 – dearn44

答えて

1

私は、かなりの量のデータがあるテーブルで以下の解決策を実行することがどれほど推奨できないと言いたいと思います。それはあなたの事件のために働くべきだと私が思いついたものです。まず、あなたは何ができるか

を試してみてください

は、各行の関心のすべての列の最小differenceによって順序です。

SELECT FirstName, 
     LastName, 
(SELECT MIN(v) 
    FROM (VALUES (DIFFERENCE(FirstName , 'Al')), 
       (DIFFERENCE(LastName , 'Al'))) AS value(v)) as diff 

FROM Users WHERE FirstName LIKE 'Al%' OR FirstName LIKE 'Al%' 
ORDER BY diff DESC; 

対話的なフィドルを試してくださいhere

第二には、別のオプションは、関心のあるすべての行の連結文字列の差の大きい順に、あなたの結果を注文され

を試してみてください。

SELECT FirstName, 
     LastName 
FROM Users 
WHERE CONCAT (FirstName, LastName) LIKE 'Al%' 
ORDER BY 
     DIFFERENCE(CONCAT (FirstName, LastName) , 'Al') DESC; 

対話的なフィドルを試してくださいhere

関連する問題