Как сделать LIKE с учетом двух столбцов?

У меня есть таблица клиентов с двумя столбцами first_name и last_name.

Как я могу использовать LIKE в запросе, который может получать данные из обоих столбцов в одном и том же ручном?

Например:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%'

Я пробовал это, и он говорит мне, что столбец full_name не существует.

Ответы

Ответ 1

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

Ответ 2

Вы почти там

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

Примечание: это может быть не очень хорошая производительность. Возможно, вы захотите рассмотреть полнотекстовый поиск.

Ответ 3

Используйте HAVING вместо WHERE:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
   FROM customer HAVING full_name LIKE 'John D%'

Ответ 4

У меня нет MySql под рукой, но вы не можете сделать что-то вроде кода ниже?

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

Отказ от ответственности: ЭТО МОЖЕТ БЫТЬ ОЧЕНЬ МЕДЛЕННО!!!

Ответ 5

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

может быть очень медленным, но это не имеет значения, если ваша база данных довольно мала. При использовании CONCAT убедитесь, что значение сортировки одинаково для обоих имен столбцов, иначе оно приведет к ошибке.

Ниже приведена инструкция, когда я хочу, чтобы мой оператор LIKE работал как для имени категории, так и для имени курса. Я проверяю cat_id в обеих таблицах, чтобы у меня появилась идея, какой курс принадлежит какой категории.

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name)
LIKE :name ORDER BY b.cat_id

: имя является заполнителем (PDO)