我用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啊。
这是咋回事勒!
太坑了,反复排查200次,发现lft,rgt,好像是系统变量。应该不是啊,left,right才是的。随便换成别的字段名就好了。谁遇到了,可倒霉透了。我是5.7版本mysql。