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 表有一个 substep_of 字段,它是父步骤 id 的外键。我仍处于可以根据需要修改数据库的阶段。

那么我的问题是,在我这样做之后:

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 回答