Une fonction MySQL peut ne pas renvoyer une ligne ou un ensemble de lignes dans MySQL. Seule une procédure stockée peut renvoyer des lignes. Ceci est vrai jusqu'à MySQL 5.4 inclus. Voir les Limites page. L'utilisation de procédures stockées en tant que tables ou les valeurs de clause where dans les requêtes n'est pas non plus disponible.
Le mieux que vous puissiez faire si vous avez besoin d'utiliser une fonction est d'utiliser GROUP_CONCAT pour obtenir les valeurs dans une liste séparée par des virgules :
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Ensuite, dans votre instruction select qui doit vérifier les uids, vous pouvez utiliser la fonction FIND_IN_SET comme ceci :
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
PS J'avais initialement publié des liens vers les fonctions GROUP_CONCAT et FIND_IN_SET sur le site Web de MySQL, mais Stack Overflow ne me permettait d'utiliser qu'un seul lien. Bravo d'être nouveau.