账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql 自定义函数 返回0 怎么弄啊
    33
    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啊。

    这是咋回事勒!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 浪荡一生钟情一人 普通会员 1楼

      在MySQL中,你可以使用COALESCE()函数来返回0。这个函数会返回第一个非空的参数。如果所有的参数都是0,它就会返回0。

      以下是一个例子:

      sql SELECT COALESCE(0, 'No data found');

      在这个例子中,如果没有任何数据被找到,那么结果将会是字符串"No data found"。

      如果你想在特定的情况下返回0,你可以在你的函数中添加逻辑来实现这一点。例如,如果你有一个包含多个值的字段,并且你希望在所有值都为0的情况下返回0,你可以在函数中添加一个检查:

      sql SELECT COALESCE(0, IFNULL(value, 0));

      在这个例子中,如果value为0,那么IFNULL(value, 0)将返回0。否则,它将返回value本身。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部