2

データベースからプロシージャを取得し、正しい順序でステップを表示できる必要があるアプリケーションがあります。ステップにサブステップがある場合もあれば、それらのサブステップに独自のサブステップがある場合もあります。かなり多くの手順について話しているため、手順ごとに個別の html ページを作成することはできません。その場でビューを生成するつもりです。これが私が表示するもののサンプルです:

1. Step 1
  a. Step 1a
    i. Step 1ai
    ii. Step 1aii
  b. Step 1b
2. Step 2

現在のところ、PROCEDURE テーブル、STEP テーブル、および相互参照する PROCEDURE_STEP テーブルがあります。STEP テーブルには、親ステップの ID への外部キーである substep_of フィールドがあります。必要に応じてデータベースを変更できる段階にまだあります。

私の質問は、私がこれをした後です:

mysql_query(SELECT * FROM PROCEDURE_STEP WHERE procedure_id = $id);

各サブステップが親ステップの下の順序で戻り配列にきちんと配置されるように、それらを並べ替えるにはどうすればよいですか? 違いがある場合は、返される配列を json でエンコードされた配列としてビューに送信します。

4

1 に答える 1

2

あなたはおそらく次のようなことをしたいと思うでしょう:

SELECT s.id, s.substep_of AS parent
FROM STEP s, PROCEDURE_STEP ps
WHERE ps.step_id = s.id
AND ps.procedure_id = $id;

これにより、ステップのリストが取得され、それぞれに ID と親 ID が含まれます。これから、再帰的にツリーを構築できます:) ...

function get_children_of( $id, $steps ) {
    $children = array();

    foreach( $steps as $step )
        if( $step->parent == $id ) 
            $children[$step->id] = get_children_of( $step->id, $steps );

    // Make it null... so we don't have deal with empty arrays
    if( empty( $children ) ) $children = null; 

    return $children;            
}

$steps = run_crazy_mysql_query();
$tree = get_children_of( 0, $steps );

これにより、次のようなツリーが表示されます。

0 => array(
    1 => null,
    2 => array(
        3 => null,
        4 => null
    )
)

これにより、ステップの HTML リストを比較的簡単に生成できるようになります。

于 2012-06-03T04:11:47.217 に答える