Funkce MySQL nemusí vrátit řádek nebo sadu řádků v MySQL. Pouze uložená procedura může vrátit řádky. To platí až do MySQL 5.4 včetně. Viz Omezení strana. Použití uložených procedur jako tabulek nebo tam, kde hodnoty klauzule v dotazech také nejsou dostupné.
Nejlepší, co můžete udělat, pokud potřebujete použít funkci, je použít GROUP_CONCAT k získání hodnot do seznamu odděleného čárkami:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Poté ve svém příkazu select, který potřebuje zkontrolovat uid, můžete použít funkci FIND_IN_SET takto:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Původně jsem na webu MySQL zveřejnil odkazy na funkce GROUP_CONCAT a FIND_IN_SET, ale Stack Overflow mi umožnil použít pouze jeden odkaz. Jo, že jsi nový.