Ответ 1
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
У меня есть таблица клиентов с двумя столбцами first_name
и last_name
.
Как я могу использовать LIKE в запросе, который может получать данные из обоих столбцов в одном и том же ручном?
Например:
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE full_name LIKE 'John D%'
Я пробовал это, и он говорит мне, что столбец full_name
не существует.
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
Вы почти там
SELECT *
FROM customer
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
Примечание: это может быть не очень хорошая производительность. Возможно, вы захотите рассмотреть полнотекстовый поиск.
Используйте HAVING
вместо WHERE
:
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer HAVING full_name LIKE 'John D%'
У меня нет MySql под рукой, но вы не можете сделать что-то вроде кода ниже?
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
Отказ от ответственности: ЭТО МОЖЕТ БЫТЬ ОЧЕНЬ МЕДЛЕННО!!!
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)