1

こんにちはcodeigniter、私はMySQLこのようなテーブル構造を使用しています。

ここに画像の説明を入力

親のタイトルを渡すと、すべての子の値を取得しています。

これがコード

<?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);

  • ご覧のとおり、これは再帰関数です。サブレベルが大きくなると、iti は非効率的になり、クエリが非常に遅くなります。

ストアド プロシージャを作成する予定です。効率的だからです。出来ますか ??可能であればサンプルコードを見せてください。よろしくお願いします....

4

1 に答える 1

-1

MySQLストアドプロシージャには、長所よりも短所があります。イムホ、この機能の使用は細心の注意を払って検討する必要があります。

主な欠点の1つは、バージョン管理できないことです。1つのバージョンがあり、それだけです。

mysql、oracle、postgreなどであるかどうかに関係なく、ストレージエンジン内にビジネスロジックを含めることは設計上悪です。

短所を念頭に置いて、ストアドプロシージャを使用することによる追加の利点がなく、パフォーマンスが向上しないという事実も考慮する必要があります。灘!

私があなたの状況にあった場合、私がすることは、データをプルして、phpで再帰処理を実行することです。

于 2012-07-23T07:24:12.407 に答える