鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ mysql 自定義函數(shù) 返回0 怎么弄啊

mysql 自定義函數(shù) 返回0 怎么弄啊

我用mysql自定義函數(shù),總是返回0,不知怎么弄的。`CREATE FUNCTION CountLayer (typeid int) RETURNS int(12)
BEGIN

#Routine body goes here...
declare result int;
    declare lft int;
    declare rgt int;
declare c int;
     
    set c = 0;
    set result = 0;
set lft = 0;
    set rgt = 0;
                     
    select count(*) into result from tree where Lft <= 2 and Rgt >= 11;
RETURN result;

END`

表結(jié)構(gòu)數(shù)據(jù)是這樣的。

DROP TABLE IF EXISTS tree;
CREATE TABLE tree (
Type_id int(12) UNSIGNED NOT NULL AUTO_INCREMENT,
Name varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
Lft int(12) NOT NULL,
Rgt int(12) NOT NULL,
PRIMARY KEY (Type_id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tree
-- ----------------------------
INSERT INTO tree VALUES (1, '商品', 1, 18);
INSERT INTO tree VALUES (2, '食品', 2, 11);
INSERT INTO tree VALUES (3, '肉類(lèi)', 3, 6);
INSERT INTO tree VALUES (4, '豬肉', 4, 5);
INSERT INTO tree VALUES (5, '蔬菜類(lèi)', 7, 10);
INSERT INTO tree VALUES (6, '白菜', 8, 9);
INSERT INTO tree VALUES (7, '電器', 12, 17);
INSERT INTO tree VALUES (8, '電視機(jī)', 13, 14);
INSERT INTO tree VALUES (9, '電冰箱', 15, 16);

總是返回0,可實(shí)際select count(*) from tree where Lft <= 2 and Rgt >= 11; 查詢(xún)結(jié)果是2啊。
如果我 set result =100 ,再return 是可以的。奇怪了。
百度說(shuō)什么,要打開(kāi)自定義函數(shù)開(kāi)關(guān),我的打開(kāi)呢,是on啊。

這是咋回事勒!

回答
編輯回答
呆萌傻

select result := count(*) from tree where ...

2018年1月10日 20:38
編輯回答
糖果果

太坑了,反復(fù)排查200次,發(fā)現(xiàn)lft,rgt,好像是系統(tǒng)變量。應(yīng)該不是啊,left,right才是的。隨便換成別的字段名就好了。誰(shuí)遇到了,可倒霉透了。我是5.7版本mysql。

2017年5月22日 12:36