Как сделать лайк с учетом двух столбцов? - PullRequest
16 голосов
/ 11 августа 2011

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

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

Например:

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

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

Ответы [ 5 ]

33 голосов
/ 11 августа 2011
SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
6 голосов
/ 11 августа 2011

Ты почти там

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

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

4 голосов
/ 11 августа 2011

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

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
   FROM customer HAVING full_name LIKE 'John D%'
0 голосов
/ 03 сентября 2013
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

: name is placeholder (PDO)

0 голосов
/ 11 августа 2011

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

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

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

...