2016-12-06 3 views
0

id、name、addressの3つのフィールドで検索します。私は私の検索がちょっと知的になりたい。mysqlのCONCAT内にワイルドカードを追加します。

加入者テーブル

id   |  firstname  |  lastname  |  address 
N29-0001 |  John   |  Doe   |  California 
N29-0002 |  Jonathan  |  Morson  |  Miami 

これまで私のクエリ

select subscriberid, CONCAT(firstname," ",lastname) as fullname, address, city from subscriber where id like "%N29 Joh%" or CONCAT(firstname," ",lastname) like "%N29 Joh%" or address like "%N29 Joh%" or city like "%N29 Joh%" 

私は私のクエリは、私がN29ヨハを入力した場合、それはジョン・ドウを検索する検索したいです。

+0

フルテキストインデックスを調べるべきだと思います。 –

答えて

1

おそらくフルテキストインデックスが必要です。しかし、単語にマッチしたいし、パフォーマンスについて気にしない場合は、正規表現を使用することができます:

select subscriberid, CONCAT(firstname, ' ', lastname) as fullname, 
     address, city 
from subscriber 
where subscriberid regexp 'N29|Joh' or 
     concat(firstname, ' ', lastname) like 'N29|Joh' or 
     address like 'N29|Joh' or 
     city like 'N29|Joh'; 
+0

全文索引を試しましたが、エラーがあります。これは私の質問です。SELECT * FROM subscriber WHERE MATCH(ID、ファーストネーム、ラストネーム、住所) (NATURAL LANGUAGE MODEで 'N29');エラーは、列リストに一致するFULLTEXTインデックスを見つけることができません。 –

+0

テーブルにFULLTEXTフィールドを入れる必要がありますか? –

+0

はい。 。 。 http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html。また、最小単語長を正しい値に設定する必要があります。 –

関連する問題