En MySQL-funktion returnerer muligvis ikke en række eller et sæt rækker i MySQL. Kun en lagret procedure kan returnere rækker. Dette gælder til og med MySQL 5.4. Se begrænsninger side. Brug af lagrede procedurer som tabeller eller hvor klausulværdier i forespørgsler heller ikke er tilgængelige.
Det bedste du kan gøre, hvis du skal bruge en funktion, er at bruge GROUP_CONCAT til at få værdierne ind i en kommasepareret liste:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Så i din select-sætning, der skal kontrollere uid'erne, kan du bruge FIND_IN_SET-funktionen som denne:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Jeg havde oprindeligt lagt links til GROUP_CONCAT- og FIND_IN_SET-funktionerne på MySQL-webstedet, men Stack Overflow ville kun lade mig bruge ét link. Yay for at være ny.