1

嗨,我正在使用codeigniterMySQL我有一个像这样的表结构。

在此处输入图像描述

当我通过父标题时,我得到了所有子值。

这是代码

<?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);我得到

Food<br>
  Fruit<br>
    Red<br>
      Cherry<br>
    Yellow<br>
      Banana<br>
  Meat<br>
    Beef<br>
    Pork

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

  • 如您所见,这是一个递归函数。当子层级增长时,效率低下,查询速度很慢。

所以我打算写一个存储过程,因为它很高效。可能吗 ??如果可能的话,请给我一个示例代码,在此先感谢........

4

1 回答 1

-1

MySQL 存储过程的缺点多于优点。恕我直言,您应该考虑非常小心地使用此功能。

主要缺点之一是它无法进行版本控制。你有一个版本,就是这样。

将业务逻辑包含在存储引擎中的设计是邪恶的,无论它是 mysql、oracle、postgre 等。

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

如果我遇到您的情况,我会做的就是将数据拉出并在 php.ini 中完成递归处理。

于 2012-07-23T07:24:12.407 回答