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。
我正在尝试根据 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。