Я хотел бы найти в моей таблице столбец с именами и фамилиями. В настоящее время я принимаю слово для поиска из поля и сравнить ее с обеих колонн, по одному сИспользование mysql concat() в предложении WHERE?
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%';
Любой совет?
EDIT: Название, которое я тестирую, это «Ларри Смит». ДБ хранит «Ларри» в столбце «first_name» и «Smith» в столбце «last_name». Данные чистые, без лишних пробелов, а поисковый запрос обрезается влево и вправо.
EDIT 2: Я попробовал ответ Роберта Гэмбла сегодня утром. Его очень похоже на то, что я бежал прошлой ночью. Я не могу это объяснить, но сегодня утром это работает. Единственное различие, о котором я могу думать, это то, что вчера вечером я запустил функцию concat как третий «или» сегмент моего поискового запроса (после просмотра first_name и last_name). Сегодня утром я провел его как последний сегмент, просмотрев выше, а также адреса и названия компаний.
Работает ли функция mysql в конце запроса лучше, чем в середине?
Я просто побежал версию вы возникли проблемы с и она отлично работает для меня. – 2008-11-20 13:12:43