MySQL 存储函数在 运行 时不 return 相同的结果 - 检索父 ID

MySQL stored function does not return same results when ran - retrieving parent id's

我正在尝试根据 SQL table 中的父 ID 检索类别列表。当 运行 作为普通查询时,查询工作正常,但是当相同的代码被复制到存储函数时 returns 重复条目。

我无法获得对 return 多个类别的查询,因此尝试了一个我理解的存储函数,显示能够做到这一点。

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

SELECT field1, field2, get_parent_categories(562) FROM...

以下按要求工作 returns "65 > 562 > 1030" http://sqlfiddle.com/#!9/9fc8acc/3

下一个存储函数不起作用,因为它 returns“562 > 562 > 562 ...”重复了 256 次。但是,当我尝试 运行 时,我在 sqlfiddle 中收到一个 "Thread stack overrun" 错误,这与我在本地测试的相同。 http://sqlfiddle.com/#!9/09a64b/1

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//

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

尝试:

...
CREATE FUNCTION get_parent_categories(_lookup_category_id INT) RETURNS LONGTEXT
...
  -- DECLARE _id INT;
...

dbfiddle