Вопрос по php, mysql, sql – Объединить два столбца в SQL для предложения WHERE

15

В моем SQL я используюWHERE а такжеLIKE пункты для выполнения поиска. Однако мне нужно выполнить поиск по объединенному значению двух столбцов -first_name а такжеlast_name:

WHERE customers.first_name + customers.last_name LIKE '%John Smith%'

Это не работает, но мне было интересно, как я могу сделать что-то подобное?

Я попытался сделать поиск по двум столбцам, например так:

WHERE customers.first_name LIKE '%John Smith%' OR customers.last_name LIKE '%John Smith%'

Но очевидно, что это не сработает, потому что поисковый запрос представляет собой объединенное значение этих двух столбцов.

Ваш Ответ

3   ответа
0


SELECT * 
FROM customers 
WHERE concat(first_name,' ',last_name) like '%John Smith%';

ссылка:
MySQL строковые функции

2

WHERE customers.first_name LIKE 'John%' AND customers.last_name LIKE 'Smith%'

Это вернуло бы результаты как:John Smith, Johnny Smithy, Johnson Smithisonпотому что знак процента находится только в концеLIKE пункт. В отличие от'%John%' который может вернуть результаты, такие как:aaaaJohnaaaa, aaaSmithaaa.

Это должно быть более эффективным, чем сначала запускать concat, а затем сравнивать.
23

WHERE CONCAT(customers.first_name, ' ', customers.last_name) LIKE '%John Smith%'

Обратите внимание, что для того, чтобы это работало как задумано, имя и фамилия должны быть обрезаны, то есть они не должны содержать начальных или конечных пробелов. Лучше обрезать строки в PHP перед вставкой в базу данных. Но вы также можете включить обрезку в ваш запрос следующим образом:

WHERE CONCAT(TRIM(customers.first_name), ' ', TRIM(customers.last_name)) LIKE '%John Smith%'

Похожие вопросы