MySQL関数は、MySQLの行または行のセットを返さない場合があります。ストアドプロシージャのみが行を返すことができます。これは、MySQL5.4までに当てはまります。 制限 を参照してください。 ページ。テーブルとしてのストアドプロシージャの使用、またはクエリでのwhere句の値も使用できません。
関数を使用する必要がある場合にできる最善の方法は、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
次に、uidをチェックする必要があるselectステートメントで、次のようにFIND_IN_SET関数を使用できます。
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S.私はもともとMySQLWebサイトにGROUP_CONCAT関数とFIND_IN_SET関数へのリンクを投稿していましたが、StackOverflowでは1つのリンクしか使用できませんでした。新しくてよかった。