如何在WHERE条件中使用存储函数

时间:2013-07-01 19:45:57

标签: mysql

我在MySQL get_parents_by_id()

中有一个存储函数

但是当我尝试在WHERE条件下使用它时会产生错误。

例如:

SELECT id, parents, level 
FROM categories
WHERE parents IN get_parents_by_id(@id);

它无法正常工作,示例包含:

WHERE parents IN (SELECT get_parents_by_id(@id)); 

不起作用。

帮助我的人,我找不到关于MySQL的书......

2 个答案:

答案 0 :(得分:0)

它需要返回一个id数组,而不是一个包含逗号分隔ID的字符串。

目前您的查询正在执行: -

SELECT id, parents, level 
FROM categories
WHERE parents IN '(0, 2, 3, 7)';

答案 1 :(得分:0)

尝试find_in_set()

SELECT id, parents, level 
FROM categories
WHERE find_in_set(parents, get_parents_by_id(@id));

注意:这需要get_parents_by_id()返回逗号分隔的字符串(varchar)。

注2:存储函数通常返回单个值,而不是结果集。

根据评论中的格式:

WHERE find_in_set(parents, 
    REPLACE(REPLACE(get_parents_by_id(@id), ')', ''), '(', ''));