Подтвердить что ты не робот

Как использовать переменные пользователя в MySQL LIKE?

Я пытаюсь настроить несколько простых 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
4b9b3361

Ответ 1

SET @email = '[email protected]';

SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');

Ответ 2

Работает без concat():

LIKE '%{$var}%'

(Mysql версия 5. +)

Ответ 3

Используется тот же синтаксис, что и оракул:

SELECT email from user WHERE email LIKE '%' || @email || '%';

Ответ 4

У вас может быть ошибка

Error Code: 1267. Illegal mix of collations for operation 'like'    0.016 sec

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

SET @email = '[email protected]' COLLATE utf8_unicode_ci;

Ответ 5

Я решил использовать функцию CONCAT перед использованием инструкции LIKE:

SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;

Это отлично работает для меня