MySQL функция може да не върне ред или набор от редове в MySQL. Само съхранена процедура може да върне редове. Това е вярно до и включително MySQL 5.4. Вижте Ограниченията страница. Използването на съхранени процедури като таблици или стойности на клаузи където в заявките също е недостъпно.
Най-доброто, което можете да направите, ако трябва да използвате функция, е да използвате GROUP_CONCAT, за да получите стойностите в разделен със запетая списък:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
След това във вашия оператор select, който трябва да провери uid, можете да използвате функцията FIND_IN_SET по следния начин:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Първоначално бях публикувал връзки към функциите GROUP_CONCAT и FIND_IN_SET на уебсайта на MySQL, но Stack Overflow ми позволи да използвам само една връзка. Браво, че си нов.