Une fonction MySQL peut ne pas retourner une ligne ou un ensemble de lignes dans MySQL. Seule une procédure stockée peut renvoyer des lignes. C'est vrai jusqu'à et y compris MySQL 5.4. Voir la page Limitations. L'utilisation de procédures stockées en tant que tables ou de valeurs de clause where dans les requêtes est également indisponible.
A propos du mieux que vous pouvez 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 posté des liens vers les fonctions GROUP_CONCAT et FIND_IN_SET sur le site web de MySQL, mais Stack Overflow me permettait seulement d'utiliser un lien. Yay pour être nouveau.