父子id mysql_用于父子类的Mysql函数

您的代码存在的问题是,

WHERE parent_id IN(x);

当x替换为其值时实际上变为:

WHERE parent_id IN(',2323,2324,2335,2336,2337,4869,5121,6033,6783,1061');

请注意那里的单引号。你认为你传递了一系列数字,但事实上你传递了一个单独的文本字符串。另请注意,您的代码前面有这个逗号。因此即使它不会传递一个单独的文本字符串,它也会因语法错误而失败。你需要做的是使用动态sql。这仅适用于存储过程,而不是函数。

我已经为你重写了代码:

DELIMITER $$

DROP PROCEDURE IF EXISTS getBaseID $$

CREATE PROCEDURE getBaseID(IN articleID varchar(1024), OUT rtext TEXT)

BEGIN

SET rtext = "-1";

SET @x = articleID;

sloop:LOOP

SET @y = NULL;

SET @sql = CONCAT('SELECT GROUP_CONCAT(id) INTO @y FROM pctable WHERE parent_id IN(', @x, ');');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

IF @y IS NULL THEN

LEAVE sloop;

END IF;

SET @x = @y;

SET rtext = CONCAT(rtext, ',', @x);

ITERATE sloop;

END LOOP;

END $$

DELIMITER ;

我添加了

SET rtext = "-1";

使用前导逗号来解决问题,假设您的表中没有否定id。

您可以使用执行它

CALL getBaseID(2322, @my_result); /*This executes the function and writes the result into the variable you pass as second parameter.*/

SELECT @my_result; /*Then you select the result.*/

最后一点,即使它适用于您的功能,在这种情况下您也不需要选择表格。你可以用SELECT getBaseID(2322);简单地执行它。这个函数中的任何内容都不是指行或什么的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值