Ich versuche, ein paar einfache SQL-Skripts einzurichten, um bei der kurzfristigen DB-Verwaltung zu helfen ..__ Als solches richte ich Variablen ein, um die Wiederverwendung dieser Skripts zu erleichtern.
Das Problem, das ich habe, betrifft speziell die LIKE-Klausel.
SET @email = '[email protected]';
SELECT email from `user` WHERE email LIKE '%@email%';
Daher möchte ich, dass Ergebnisse basierend auf dem E-Mail-SET in der Variablen gefunden werden. Die Abfrage funktioniert, wenn Sie die E-Mail manuell in die LIKE-Klausel eingeben.
Wie kann ich erreichen, dass die LIKE-Klausel mit der Benutzervariable arbeitet?
UPDATE: Die Antwort von @ Dems funktioniert für diesen einfachen Fall, aber ich habe Probleme mit einer komplexeren Abfrage.
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, '%')
Gibt mir den Fehler "FUNKTION mydb.CONCAT existiert nicht"
Die Abfrage funktioniert ohne 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, '%');
Funktioniert ohne concat ():
LIKE '%{$var}%'
(Meine Version 5. +)
Keine Notwendigkeit für CONCAT, verwenden Sie einfach '%' + Variable + '%'
SET @email = '[email protected]';
Wähle E-Mail von user
WO E-Mail LIKE '%' + @email + '%';
Die Verwendung derselben Syntax wie Oracle scheint zu funktionieren:
SELECT email from user WHERE email LIKE '%' || @email || '%';
Ich habe die Funktion CONCAT vor der Verwendung der LIKE-Anweisung aufgelöst:
SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;
Es funktioniert gut für mich
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
Sie haben möglicherweise einen Fehler
Error Code: 1267. Illegal mix of collations for operation 'like' 0.016 sec
In diesem Fall müssen Sie dieselbe Kollatierung angeben, die für Ihre Tabelle verwendet wird:
SET @email = '[email protected]' COLLATE utf8_unicode_ci;