- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我搜索了很多做任务但没有找到合适的解决方案。
基本上是这样的。我有一个 user_comment 表,其中有 5 列(id、parent_id、user_comments、is_deleted、modified_datetime)。有一个父子关系,如 1->2,1->3,2->4,2->5,5->7 等。
现在我从前端发送 id,我想要将 is_deleted 列更新为 1 并将所有记录的 modified_datetime 更新为这个 id 以及所有的 child 和 child 的 child 。
我正在尝试使用递归过程来完成此操作。下面是我的程序代码
CREATE DEFINER=`root`@`localhost` PROCEDURE `user_comments`(
IN mode varchar(45),
IN comment_id int,
)
BEGIN
DECLARE p_id INT DEFAULT NULL ;
if(mode = 'delete')
then
update user_comment set is_deleted = 1, modified_datetime = now()
where id = comment_id ;
select id from user_comment where parent_id = comment_id into p_id ;
if p_id is not null
then
SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;
call user_comments('delete', p_id);
end if;
end if;
END
通过使用这个过程,它给我一个多行的错误。如果我返回选择查询而不将其提供给变量,则会显示选择查询的适当结果,但我必须根据获取选择查询的 ID 递归调用此过程。
我需要帮助,我已经过了 2 天了。
我也用过游标。下面是游标的代码
CREATE DEFINER=`root`@`localhost` PROCEDURE `user_comments`(
IN mode varchar(45),
IN comment_id int,
)
BEGIN
DECLARE p_emp int;
DECLARE noMoreRow INT;
DECLARE cur_emp CURSOR FOR select id from user_comment where parent_id = comment_id ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET noMoreRow = 0;
if(mode = 'delete')
then
OPEN cur_emp;
LOOPROWS: LOOP
IF noMoreRow = 0 THEN
update user_comment set is_deleted = 1, modified_datetime = now() where id = comment_id
CLOSE cur_emp;
LEAVE LOOPROWS;
END IF;
FETCH cur_emp INTO p_emp;
update user_comment set is_deleted = 1, modified_datetime = now() where id = p_emp ;
SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;
call user_comments('delete', p_emp);
END LOOP;
end if;
END
在使用游标后我得到一个线程错误。我不知道如何解决这个问题!!!
最佳答案
关于 select ... into varlist 的 Mysql 文档明确地说:
The selected values are assigned to the variables. The number of variables must match the number of columns. The query should return a single row. If the query returns no rows, a warning with error code 1329 occurs (No data), and the variable values remain unchanged. If the query returns multiple rows, error 1172 occurs (Result consisted of more than one row). If it is possible that the statement may retrieve multiple rows, you can use LIMIT 1 to limit the result set to a single row.
由于您在 OP 中写道一条评论可以是许多评论的父评论,因此使用简单变量不是解决方案。你应该使用 CURSOR相反,它可以存储整个结果集。
如上述链接中的示例代码所示,您可以遍历 cursos 中的记录,并以递归方式调用 user_comments()
。
更新
如果你收到
Error Code: 1436. Thread stack overrun
错误,那么你可以做两件事:
增加配置文件中的thread_stack
设置并重启mysql服务器。
您可以尝试简化代码以使用更少的递归,从而减少堆栈空间。例如,当您将所有子项提取到游标中,而不是为每个子项递归调用 user_comments()
时,您可以在代码中设置所有直接子项的状态并仅对孙子项递归调用该函数(如果有的话)。您还可以更改数据结构并使用 nested set模型来处理层次结构。
嵌套集模型理解起来更复杂,遍历的资源消耗更少,但维护的资源消耗更多。
关于mysql - 使用mysql更新具有父子关系的同一个表的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35058611/
我正在开发我的第一个核心数据支持的应用程序,但无法弄清楚如何正确设置 NSFetchedResultsController。我有两个实体: /-----------\ /--------
我是 javax.swing.* 包的新手,只熟悉 c#.net。我有两个 JFrame,分别是 frmLogin 和 frmMain。我想要做的只是一个像这样的简单代码: +----- C# 版本
我正在从 CoreData 迁移到 Realm...本质上我需要有两个独立的数据库,假设一个只有内存,第二个有磁盘持久性 现在在解析期间,我需要创建一个可以在给定线程中工作但与我选择的顶级 Realm
下面是我的表中的内容。 我的表格 ++++++++++++++++++++ Parent + Child ++++++++++++++++++++ C1 + G1 C1
好的,让我们设置一个场景。 场景: 您有一个内容 Controller 。该内容可能是一张照片、一篇博文等等。现在,在此内容的 html 中,您有一个 Comment Controller 。 Com
我有两个脚本 parent.sh 和 child.sh。 parent.sh 中有一个变量需要被子进程访问。我已经通过在父脚本中导出变量来实现这一点,并且该变量可用于子进程? 有什么方法可以让 chi
我见过类似但不完全相同的请求。 如果我有下表 Parent Child 1 2 1 3 4 3 5 1 6 1 5 7 8
这类似于问题 ( Finding parents in a tree hierarchy for a given child LINQ (lambda expression) )。但是,我不需要找到所
好的,所以我是 C# 做事的新手,我来自 ruby 世界。 我有一个一对多的关系(为了这个问题, parent 对 child ),出于某种原因,L2S 想要创建一个新的 parent 而不是使用
我想为我的网站创建一个完全由数据驱动的面包屑。 数据使用 MariaDB 存储,如下所示: parent_id | parent_name | child_id | child_name ——————
所以,我正在查看 Parse Anypic 教程中的代码 here 我的问题是: 有这 2 个 View Controller : @interface PAPHomeViewController :
我正在使用 CSS 处理树结构层次结构,我需要一些帮助。我想让两个父子链接起来,如果我删除字符 a,我将无法查看 CSS ::after 选择器中定义的 border-left 来自内容元素。 这是我
我对实现以下目标有点困惑1.禁用一个父div的可见性2. 但另一个代码允许子 div 可见性 http://jsfiddle.net/cbXxU/ 如果父 div 不可见或对此
我正在创建一个水平的 ul 导航栏。每个 li 元素都有不同的宽度。我想在下拉菜单中做到这一点,下拉菜单中的“子级” li 项的长度/宽度与“父级” li 项的长度/宽度相同。正在考虑使用 jQuer
我有这个问题很长时间了,我已经在网上和SO进进出出搜索,但还没有找到解决方案。我希望你能帮助我。 我有两个实体之间的父子关系,如下所示: @Entity public class Parent {
我需要在我的网页上找到一个与其他元素具有相同标签的元素,因此我需要根据子部分[parent]的标题找到xpath。 以下是网页的html代码: 基本上,我想根据上图中的 Scheduled 文本在 l
我有 2 张 table .. Adult ------------------- id ParentChild ------------------- parentID(adult's id) ch
我想创建一个函数来创建彼此具有分层关系的对象。因此,每个层对象都拥有自己的一组子层对象,并与其所有兄弟对象共享一个父对象。我不熟悉任何模式,但我想应该有一个模式可以涵盖这种情况。 //construc
我有一个父 div 和一个子 div。这里是 html Parent Child Div Js var parent = document.createElement("parent");
我正在开发一个 reactjs 应用程序 - 我正在分解一个大组件以拥有一个子组件。我在 child 中创建了一个回调函数,它将返回给 parent 。当一个复选框被选中时——子组件执行回调并返回到父
我是一名优秀的程序员,十分优秀!