MySQL存储函数在运行时不返回相同的结果-检索父id

MySQL存储函数在运行时不返回相同的结果-检索父id,mysql,stored-functions,Mysql,Stored Functions,我正在尝试从SQL表中检索基于父Id的类别列表。当作为普通查询运行时,查询可以正常工作,但当相同的代码复制到存储函数中时,返回重复的条目 我无法让查询返回多个类别,所以我尝试了一个存储函数,我知道它可以做到这一点 我已经排除了整个查询,但希望能够从SELECT语句调用,即 SELECT field1, field2, get_parent_categories(562) FROM... 当它返回65>562>1030时,以下函数按需要工作 下一个是存储函数,它返回562>562>562时不工

我正在尝试从SQL表中检索基于父Id的类别列表。当作为普通查询运行时,查询可以正常工作,但当相同的代码复制到存储函数中时,返回重复的条目

我无法让查询返回多个类别,所以我尝试了一个存储函数,我知道它可以做到这一点

我已经排除了整个查询,但希望能够从SELECT语句调用,即

SELECT field1, field2, get_parent_categories(562) FROM...
当它返回65>562>1030时,以下函数按需要工作

下一个是存储函数,它返回562>562>562时不工作。。。重复256次。但是,在尝试运行本地测试的线程堆栈时,SQLFIDLE中出现线程堆栈溢出错误。

列_id和局部变量_id的别名可能是原因

尝试:

... 创建函数get\u parent\u categories\u lookup\u category\u id INT返回LONGTEXT ... -声明_idint; ... 请参阅。

列id和局部变量id的别名可能是原因

尝试:

... 创建函数get\u parent\u categories\u lookup\u category\u id INT返回LONGTEXT ... -声明_idint; ...
请参阅。

在真正的服务器上是否会出现此错误?您不能在sqlfiddle上调整线程堆栈限制,您应该可以在服务器上进行调整。看到没有,我没有在我的本地服务器上得到任何错误,它只是返回562>562>562。。。重复256次,而不是65>562>1030。您在实际服务器上收到此错误吗?您不能在sqlfiddle上调整线程堆栈限制,您应该可以在服务器上进行调整。看到没有,我没有在我的本地服务器上得到任何错误,它只是返回562>562>562。。。重复256次,而不是65>562>1030次。
CREATE TABLE IF NOT EXISTS `categories` (
  `categories_id` int(11) NOT NULL AUTO_INCREMENT,  
  `parent_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`categories_id`)
) DEFAULT CHARSET=utf8//

INSERT INTO `categories` (`categories_id`, `parent_id`) VALUES (1030, 0),(562,65),(65,1030)//

CREATE FUNCTION get_parent_categories(_lookup_category_id INT) RETURNS LONGTEXT
NOT DETERMINISTIC
READS SQL DATA
BEGIN

    DECLARE _id INT;
    DECLARE _categories LONGTEXT DEFAULT "no categories";

    #CREATE TEMPORARY TABLE mycats
    SELECT GROUP_CONCAT(c.categories_id SEPARATOR " > ") INTO _categories

    FROM (
        SELECT
            @r AS _id,
            (SELECT @r := parent_id FROM categories WHERE categories_id = _id) AS parent_id
        FROM
            (SELECT @r := _lookup_category_id) vars, categories
        WHERE @r <> 0) T1
    JOIN categories c ON T1._id = c.categories_id;

    RETURN _categories;

END//