Я хотел бы найти в моей таблице столбец с именами и столбец с фамилиями. В настоящее время я принимаю поисковый запрос из поля и сравниваю его с обоими столбцами, по одному с
select * from table where first_name like '%$search_term%' or
last_name like '%$search_term%';
Это прекрасно работает с поисковыми терминами, состоящими из одного слова, но набор результатов включает всех с именем «Ларри». Но если кто-то вводит имя, затем пробел, затем фамилию, я хочу более узкий результат поиска. Я попробовал следующее без успеха.
select * from table where first_name like '%$search_term%' or last_name
like '%$search_term%' or concat_ws(' ',first_name,last_name)
like '%$search_term%';
Какой совет?
РЕДАКТИРОВАТЬ: Имя, с которым я тестирую, "Ларри Смит". БД хранит «Larry» в столбце «first_name» и «Smith» в столбце «last_name». Данные чистые, лишних пробелов нет, а поисковый запрос обрезается слева и справа.
РЕДАКТИРОВАТЬ 2: Я попробовал ответ Роберта Гэмбла сегодня утром. Его очень похоже на то, что я бегал прошлой ночью. Я не могу это объяснить, но сегодня утром это работает. Единственное различие, о котором я могу думать, это то, что прошлой ночью я запустил функцию concat в качестве третьего сегмента «или» моего поискового запроса (после просмотра first_name и last_name). Этим утром я проверил это как последний сегмент после просмотра вышеупомянутого так же как адресов и названий компаний.
Работает ли функция mysql в конце запроса лучше, чем в середине?