2016-12-06 17 views
0

Я хочу найти по трем полям: id, name и address. Я хочу, чтобы мой поиск был немного умным.Добавить шаблон в CONCAT в mysql

подписчик стол

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 Joh, он будет искать John Doe.

+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 абонент WHERE MATCH (id, firstname, lastname, address) ПРОТИВ ('N29' В РЕЖИМЕ ПРИРОДНОГО ЯЗЫКА); ошибка не может найти индекс FULLTEXT, соответствующий списку столбцов. –

+0

Мне нужно иметь поле FULLTEXT в моем столе, верно? –

+0

Да. , , http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html. И вам нужно установить минимальную длину слова на правильное значение. –