2012-04-04 14 views
5

テーブルユーザには、フィールド(id、first_name、middle_name、last_name)があります。テーブルの複数のフィールドで文字列を検索

私は彼の名前でユーザーを見つけるためのクエリを書きたいと思っています。名前はファーストネーム、ミドルネームまたはラストネームであってもよい。

$sql = "SELECT * FROM user 
     WHERE first_name like '%$name%' OR 
       middle_name like '%$name%' OR 
       last_name like '%$name%'"; 

効率的なクエリですか? (現時点でセキュリティ上の問題を残しておいてください)

+1

何を比較すると効率的ですか? – Jon

+0

このコメントによるとhttp://stackoverflow.com/questions/9986678/searching-more-than-1-column/9986696#comment12762483_9986696 UNIONはより速い –

+0

@Jonそのタスクを実行するためのより良いクエリを取得したいと考えています。私は何と比較していません。 –

答えて

3

ALTER TABLEを願っていますし、それはかなり速く、クエリ、その後だ

select * 
from table_name 
where match (`First_name`,`second_name`,`last_name`) against('name') 

このクエリを使用し、その後First_name,second_name,last_nameに複合全文インデックスを追加します。

1

WHERE句にLIKE '%something%'が設定されると、強制的にテーブルスキャンが実行されます。だから、それは非効率的ですが、1つまたは3つのLIKEステートメントはほとんど違いがありません。

テーブルスキャンは大きなパフォーマンスヒットです。

MySQLのFull Text Search機能を検討することを検討してください。このタイプのクエリーには、より効率的に回答するように設計されています。

0

複数のフィールドでパターンを検索する必要がある場合は、テーブルスキーマを変更する権限がある場合は、FULL-TEXT SEARCHを実装することをおすすめします。

は、それが役立ちます:)

関連する問題