Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die MySQL-Create-Funktion gibt keine Sets zurück

Eine MySQL-Funktion gibt möglicherweise keine Zeile oder keinen Satz von Zeilen in MySQL zurück. Nur eine gespeicherte Prozedur kann Zeilen zurückgeben. Dies gilt bis einschließlich MySQL 5.4. Siehe Einschränkungen Seite. Die Verwendung von gespeicherten Prozeduren als Tabellen oder where-Klauselwerte in Abfragen ist ebenfalls nicht verfügbar.

Das Beste, was Sie tun können, wenn Sie eine Funktion verwenden müssen, ist die Verwendung von GROUP_CONCAT, um die Werte in eine durch Kommas getrennte Liste zu bringen:

CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END

Dann können Sie in Ihrer Select-Anweisung, die die UIDs überprüfen muss, die FIND_IN_SET-Funktion wie folgt verwenden:

SELECT ... WHERE FIND_IN_SET(my_field, get_uids());

P.S. Ich hatte ursprünglich Links zu den Funktionen GROUP_CONCAT und FIND_IN_SET auf der MySQL-Website gepostet, aber Stack Overflow ließ mich nur einen Link verwenden. Juhu, dass du neu bist.