#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 поиск уже это делает.