2016-04-28 12 views
0

我想用php和mySQL创建一个无序列表的流程图。php mySQL的无序列表(流程图)

表 - 问题

ID |问题| answer_id

表 - 答案

ID |回答| question_id

每个问题都有一个answer_id的引用。并且answer_id引用了question_id(请参阅附加图像)。

Flowchart

到目前为止,PHP:

// Starts with the first question (answer_id=0) 
$sql = db_query("SELECT * FROM questions WHERE answer_id='0'"); 
while ($row = mysqli_fetch_assoc($sql)){ ?> 

<ul> 
    <li> 
     <?php echo $row['question']; 
     $question_id = $row['id']; 
    } 

    $sql = db_query("SELECT * FROM answers WHERE question_id='$question_id'"); 
    while ($row = mysqli_fetch_assoc($sql)){ 
    $question_id = $row['id']; 
    ?> 
     <ul> 
      <li> 
      <?php echo $row['answer'];?> 

     <? 
     $answer_id = $row['id']; 

     $sqlf = db_query("SELECT * FROM questions WHERE answer_id='$answer_id'"); 
     while ($rowf = mysqli_fetch_assoc($sqlf)){ ?> 
     <ul> 
      <li> 
       <?php echo $rowf['question'];?> 
      </li> 

      <? 
      $question_id = $rowf['id']; 
      $sqls = db_query("SELECT * FROM answers WHERE question_id='$question_id'"); 
      while ($rows = mysqli_fetch_assoc($sqls)){ ?> 
       <ul> 
       <li> 
        <?php echo $rows['answer'];?> 
       </li> 
      </ul> 
      <? 
      } 
     } 
    } 

我对这个总BRAINFREEZE。我如何得到一个循环来打印带有孩子答案和孩子问题等问题?

+0

我想你应该看看递归函数:) – Naruto

+0

听起来像是一个不错的选择。但哼? :D – Stichy

+0

[在PHP中将所有行元素打印为树]可能的重复(http://stackoverflow.com/questions/17989186/printing-down-all-row-elements-as-tree-in-php) – Naruto

回答

0

对于书写功能,请参阅PHP文档,电子。 G。 herehere。递归函数是再次调用自己的函数。要小心,如果你做得不对,你可能会陷入无穷无尽的递归(直到堆栈溢出,至少......)。重要的是你打破递归的条件。这可能是如果你的答案的question_id为空( - >没有后续问题)。

此外 - 虽然你没有要求 - 我建议为你的数据库重新设计。从你显示的图像看来,每个答案只属于一个问题,但每个问题可以有多个答案。

因此,只有表问题(id,问题)和表答案(id,answer,answers_question,followup_question)。你避免在你的数据库中有重复(然后需要连接来获得问题的答案)。