mysql 自定义函数 返回0 怎么弄啊

我用mysql自定义函数,总是返回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`

表结构数据是这样的。

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, '肉类', 3, 6);
INSERT INTO tree VALUES (4, '猪肉', 4, 5);
INSERT INTO tree VALUES (5, '蔬菜类', 7, 10);
INSERT INTO tree VALUES (6, '白菜', 8, 9);
INSERT INTO tree VALUES (7, '电器', 12, 17);
INSERT INTO tree VALUES (8, '电视机', 13, 14);
INSERT INTO tree VALUES (9, '电冰箱', 15, 16);

总是返回0,可实际select count(*) from tree where Lft <= 2 and Rgt >= 11; 查询结果是2啊。
如果我 set result =100 ,再return 是可以的。奇怪了。
百度说什么,要打开自定义函数开关,我的打开呢,是on啊。

这是咋回事勒!

阅读 2.5k
2 个回答

太坑了,反复排查200次,发现lft,rgt,好像是系统变量。应该不是啊,left,right才是的。随便换成别的字段名就好了。谁遇到了,可倒霉透了。我是5.7版本mysql。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题