Ответ 1
SET @email = '[email protected]';
SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');
Я пытаюсь настроить несколько простых SQL-скриптов, чтобы помочь с некоторыми краткосрочными администрированиями БД. Таким образом, я настраиваю переменные, чтобы упростить повторное использование этих сценариев.
Проблема, с которой я столкнулась, связана с предложением LIKE.
SET @email = '[email protected]';
SELECT email from `user` WHERE email LIKE '%@email%';
Поэтому я хочу, чтобы он находил результаты на основе электронной почты SET в переменной. Запрос работает, если я вручную введу электронное письмо в предложение LIKE.
Как я могу заставить предложение LIKE работать с пользовательской переменной?
UPDATE: Ответ @dems работает для этого простого случая, но у меня возникают проблемы с более сложным запросом.
SET @email = '[email protected]';
SELECT project.projectno, project.projectname, login.username,
CONCAT(login.firstname, ' ', login.lastname), projectuser.title
FROM projectuser
INNER JOIN login ON projectuser.uid = login.uid
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE CONCAT ('%', @email, '%')
Дает мне ошибку "FUNCTION mydb.CONCAT не существует"
Запрос работает без CONCAT():
SET @email = '[email protected]';
SELECT project.projectno, project.projectname, login.username,
CONCAT(login.firstname, ' ', login.lastname), projectuser.title
FROM projectuser
INNER JOIN login ON projectuser.uid = login.uid
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE @email
SET @email = '[email protected]';
SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');
Работает без concat():
LIKE '%{$var}%'
(Mysql версия 5. +)
Используется тот же синтаксис, что и оракул:
SELECT email from user WHERE email LIKE '%' || @email || '%';
У вас может быть ошибка
Error Code: 1267. Illegal mix of collations for operation 'like' 0.016 sec
В этом случае вам нужно указать ту же сортировку, что и для вашей таблицы:
SET @email = '[email protected]' COLLATE utf8_unicode_ci;
Я решил использовать функцию CONCAT перед использованием инструкции LIKE:
SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;
Это отлично работает для меня