MySQL存储函数在运行时不返回相同的结果-检索父id
我正在尝试从SQL表中检索基于父Id的类别列表。当作为普通查询运行时,查询可以正常工作,但当相同的代码复制到存储函数中时,返回重复的条目 我无法让查询返回多个类别,所以我尝试了一个存储函数,我知道它可以做到这一点 我已经排除了整个查询,但希望能够从SELECT语句调用,即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时不工
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//