Как выполнить поиск по имени и фамилии в — Mysql

#mysql #search

#mysql #Поиск

Вопрос:

Учтите, что у меня есть поля tow в моей таблице

 field_profile_first_name_value      field_profile_last_name_value

Victor                              Brecher
Abhi                                Jass             

select field_profile_first_name_value, field_profile_last_name_value 
from content_type_profile where field_profile_first_name_value LIKE '%Victor Bre%' OR 
field_profile_last_name_value LIKE '%Victor Bre%'
  

У меня текстовое поле автозаполнения.

Когда я ввожу ключевое слово как victor, оно выдает результат. Но если я укажу имя и фамилию одновременно, это не даст результата.

То есть, если я укажу ключевое слово как Victor Brecher, это не даст результата.

Как я могу получить результат, если я введу имя и фамилию?

Как я могу это сделать?

Ответ №1:

Попробуйте :

 select * from contracts 
where lower(concat_ws(' ', field_profile_first_name_value, field_profile_last_name_value)) 
like lower('%Victor Bre%')
  

Ответ №2:

Ну, даже вам не нужно использовать lower тоже. просто используйте его просто.

 select * from contracts where concat_ws(' ', field_profile_first_name_value,field_profile_last_name_value)
like '%Victor Bre%'
  

Ответ №3:

Я бы использовал soundex.

 select * from contracts where SOUNDEX(concat_ws(' ', field_profile_first_name_value,field_profile_last_name_value)) =  SOUNDEX('Victor Bre');
  

Комментарии:

1. Если никаких результатов не было возвращено с использованием типа ‘%name%’, то поиск SOUNDEX вернет результаты, похожие по звучанию, в случае неправильного написания имени.

2. Это моя ошибка — я просматривал «новые материалы» и рассматривал это как вопрос, а не ответ — это определенно вклад в проблему, и я поменяю свой понижающий голос на повышающий, если ответ будет отредактирован, чтобы я мог отменить. Извинения.

Ответ №4:

Я предлагаю использовать этот код, чтобы поиск также работал, если поисковым вводом является фамилия перед именем

 SELECT 
 *
FROM
  contracts
WHERE
   CONCAT(firstname, ' ', lastname)) LIKE 'Victor Bre%'
OR CONCAT(lastname, ' ', firstname)) LIKE 'Victor Bre%';
  

Более того, я протестировал этот код sql с помощью и без LOWER(), в mysql 5.7 поиск уже это делает.