2016-04-28 16 views
0

Ich möchte ein Flussdiagramm mit ungeordneter Liste mit PHP und MySQL erstellen.Ungeordnete Liste mit PHP mySQL (Flussdiagramm)

Tabelle - Fragen

id | Frage | answer_id

Tabelle - Antworten

id | Antwort | question_id

Jede Frage hat einen Verweis auf eine Antwort-ID. Und die Antwort-ID hat einen Verweis auf eine Frage-ID (siehe angehängtes Bild).

Flowchart

Die php so weit:

// 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> 
      <? 
      } 
     } 
    } 

Ich habe insgesamt brainfreeze darüber. Wie kann ich eine Schleife erhalten, um Fragen mit Kinderantworten und Kinderfragen auszudrucken?

+0

Ich denke, Sie sollten sich eine rekursive Funktion ansehen :) – Naruto

+0

Klingt wie eine gute Wahl. Aber hooo? : D – Stichy

+0

Mögliches Duplikat von [Alle Zeilenelemente als Baum in PHP ausdrucken] (http://stackoverflow.com/questions/17989186/printing-down-all-row-elements-as-tree-in-php) – Naruto

Antwort

0

Zum Schreiben Funktionen finden Sie PHP-Dokumentation, e. G. here oder here. Eine rekursive Funktion ist eine, die sich selbst aufruft. Seien Sie vorsichtig mit, Sie können in endlose Rekursion (bis Stapelüberlauf, mindestens ...) enden, wenn Sie es nicht richtig machen. Die wichtige Sache ist eine Bedingung, in der Sie die Rekursion brechen. Dies könnte der Fall sein, wenn die Frage-ID Ihrer Antwort Null ist (-> keine Folgefrage).

Zusätzlich - obwohl Sie nicht gefragt haben - schlage ich ein Redesign für Ihre Datenbank vor. Aus dem Bild, das Sie zeigen, scheint es, dass jede Antwort zu genau einer Frage gehört, aber jede Frage kann mehr als eine Antwort haben.

So haben Sie die Tabelle Fragen nur als (ID, Frage) und haben Tabellenantworten als (ID, Antwort, antworted_question, followup_question). Sie vermeiden es dann, Duplikate in Ihrer Datenbank zu haben (aber Sie benötigen eine Verknüpfung, um die Antworten auf eine Frage zu erhalten).