我无法使用MySQL 5.x完成这项工作.此函数应返回select语句中的所有相关行:
CREATE FUNCTION getuids(root INT)
RETURNS SET OF INT AS $$
BEGIN
RETURN SELECT uid FROM pages WHERE deleted = 0
END
$$ LANGUAGE 'SQL';
Run Code Online (Sandbox Code Playgroud)
知道我弄错了吗?
MySQL函数可能不会在MySQL中返回一行或一组行.只有存储过程才能返回行.这是真的,包括MySQL 5.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
Run Code Online (Sandbox Code Playgroud)
然后在需要检查uid的select语句中,可以使用FIND_IN_SET函数,如下所示:
SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
Run Code Online (Sandbox Code Playgroud)
PS我最初在MySQL网站上发布了GROUP_CONCAT和FIND_IN_SET函数的链接,但Stack Overflow只允许我使用一个链接.是新的.
| 归档时间: |
|
| 查看次数: |
4291 次 |
| 最近记录: |