J'essaie de configurer quelques scripts SQL simples pour aider à l'administration d'une base de données à court terme . En tant que tel, je configure des variables pour faciliter la réutilisation de ces scripts.
Le problème que je rencontre concerne spécifiquement la clause LIKE.
SET @email = '[email protected]';
SELECT email from `user` WHERE email LIKE '%@email%';
Donc, je veux qu'il trouve des résultats basés sur le SET email dans la variable. La requête fonctionne si je saisis manuellement le courrier électronique dans la clause LIKE.
Comment puis-je faire en sorte que la clause LIKE fonctionne avec la variable utilisateur?
UPDATE: La réponse de @ dems fonctionne pour ce cas simple, mais j'ai des problèmes avec une requête plus complexe.
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, '%')
Me donne l'erreur "FONCTION mydb.CONCAT n'existe pas"
La requête fonctionne sans 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, '%');
Fonctionne sans concat ():
LIKE '%{$var}%'
(Mysql version 5. +)
Pas besoin de CONCAT, utilisez simplement '%' + Variable + '%'
SET @email = '[email protected]';
SELECT email de user
WHERE email LIKE '%' + @email + '%';
Utiliser la même syntaxe que Oracle semble fonctionner:
SELECT email from user WHERE email LIKE '%' || @email || '%';
J'ai résolu en utilisant la fonction CONCAT avant d'utiliser l'instruction LIKE:
SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;
Ça fonctionne bien pour moi
BEGIN
SET @emailid = CONCAT('%', '[email protected]' ,'%');
SET @t1 =CONCAT('SELECT * FROM user WHERE email LIKE ''', @emailid, '''');
PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
END
Vous pouvez avoir une erreur
Error Code: 1267. Illegal mix of collations for operation 'like' 0.016 sec
Dans ce cas, vous devez spécifier le même classement que celui utilisé pour votre table:
SET @email = '[email protected]' COLLATE utf8_unicode_ci;