Một hàm MySQL có thể không trả về một hàng hoặc tập hợp các hàng trong MySQL. Chỉ một thủ tục được lưu trữ mới có thể trả về các hàng. Điều này đúng cho đến và bao gồm cả MySQL 5.4. Xem Hạn chế trang. Việc sử dụng các thủ tục được lưu trữ dưới dạng bảng hoặc trong đó giá trị mệnh đề trong các truy vấn cũng không khả dụng.
Về điều tốt nhất bạn có thể làm nếu cần sử dụng một hàm là sử dụng GROUP_CONCAT để đưa các giá trị vào danh sách được phân tách bằng dấu phẩy:
CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
BEGIN
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
RETURN @uid_list;
END
Sau đó, trong câu lệnh đã chọn của bạn cần kiểm tra các nắp, bạn có thể sử dụng hàm FIND_IN_SET như sau:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
P.S. Ban đầu tôi đã đăng các liên kết đến các hàm GROUP_CONCAT và FIND_IN_SET trên trang web MySQL, nhưng Stack Overflow sẽ chỉ cho phép tôi sử dụng một liên kết. Yay vì là người mới.