首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在MySQL存储过程中编写此递归循环?

问是否可以在MySQL存储过程中编写此递归循环?
EN

Stack Overflow用户
提问于 2012-07-22 16:28:20
回答 1查看 527关注 0票数 1

嗨,我正在使用codeigniter和MySQL,我有这样的表结构。

​

​

当我传递父标题时,我将得到所有的子值。

这是密码

代码语言:javascript
复制
<?php <br>
// $parent is the parent of the children we want to see <br>
// $level is increased when we go deeper into the tree, <br>
//        used to display a nice indented tree <br>
function display_children($parent, $level) { <br>
    // retrieve all children of $parent <br>
    $result = mysql_query('SELECT title FROM tree '. <br>
                           'WHERE parent="'.$parent.'";'); <br>
 <br>
    // display each child <br>
    while ($row = mysql_fetch_array($result)) { <br>
        // indent and display the title of this child <br>
        echo str_repeat('  ',$level).$row['title']."\n"; <br>
 <br>
        // call this function again to display this <br>
        // child's children <br>
        display_children($row['title'], $level+1); <br>
    } <br>
} <br>
?>

当我通过display_children('',0);的时候

代码语言:javascript
复制
Food<br>
  Fruit<br>
    Red<br>
      Cherry<br>
    Yellow<br>
      Banana<br>
  Meat<br>
    Beef<br>
    Pork

要显示“果树”子树,您可以运行display_children('Fruit',0);

  • 如您所见,这是一个递归函数。当子级别增长时,iti效率很低,使得查询非常慢。

因此,我计划编写一个存储过程,因为它是有效的。有可能吗??如有可能,请给我看一个示例代码,谢谢.

EN

回答 1

Stack Overflow用户

发布于 2012-07-23 07:24:12

MySQL存储过程有更多的缺点而不是优点。Imho,您应该非常小心地考虑使用这个特性。

主要的缺点之一是它不能被版本化。你只有一个版本,仅此而已。

无论是mysql、oracle、postgre等,在存储引擎中包含业务逻辑都是有害的。

考虑到这些缺点,您还应该考虑这样一个事实,即您没有使用存储过程的额外好处--没有性能增益。纳达!

如果是在您的情况下,我要做的就是将数据提取出来,并在php中完成递归处理。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11601976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档