En MySQL-funktion kanske inte returnerar en rad eller uppsättning rader i MySQL. Endast en lagrad procedur kan returnera rader. Detta gäller fram till och med MySQL 5.4. Se Begränsningar sida. Användning av lagrade procedurer som tabeller eller där klausulvärden i frågor inte heller är tillgängliga.
Det bästa du kan göra om du behöver använda en funktion är att använda GROUP_CONCAT för att få in värdena i en kommaseparerad lista:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Sedan kan du använda FIND_IN_SET-funktionen så här i din select-sats som behöver kontrollera uids:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Jag hade ursprungligen lagt upp länkar till funktionerna GROUP_CONCAT och FIND_IN_SET på MySQL-webbplatsen, men Stack Overflow lät mig bara använda en länk. Yay för att vara ny.