2013-05-09 97 views
0

目前我正在創建symfony2.2框架中的apis。我不得不從數據庫中檢索一堆問題和答案。在php中檢索樹結構中的數據

       Q1 
          /\ 
          A1 A2 
          /  \ 
          Q2  Q3 
         /| \ /| | \ 
         A3 A4 A5 A6 A7 A8 A9 
         / | 
         Q4 Q2 ... 

我的DB的結構如下:

Question: (questionId,questionText) 
AnswerOption: (id,questionId,option,nextQuestionId) 

這裏上圖中存在具有2個選擇A1和A2一個根問題。

在選擇A1時,用戶必須被重定向到Q2等,等等。

注意:用戶可能無法回答所有問題。

現在,我需要找到最好的方式:

1:檢索數據從數據庫。

2:格式化Json文件中的問題。

+0

你可能需要在MySQL中使用 – Kickstart 2013-05-09 12:28:55

回答

0

好的。首先,您從數據庫中獲取a1和a2的密鑰,然後根據您的選擇從不同的表格中檢索數據,只需匹配id(從A1和A2中選擇)和回溯與您的選擇ID匹配的數據,然後執行依此類推。

0
<?php 
    if(!empty($_POST) { 
     $nextQues = "SELECT * from Question WHERE id = '" . $_POST['next_ques_id'] . "'"; 
     $nxtAnswers = "SELECT * from AnswerOption WHERE questionId = '" . $_POST['next_ques_id'] . "'"; 
    } 
?> 

// in view, loop through $nxtAnswers and assign $nxtAnswers['nextQuestionId'] to input 
<?php foreach ($nxtAnswers as $ans): ?> 
    <input type="radio" name="next_ques_id" value="<?=$nxtAnswers['nextQuestionId']?>"><?=$ans['option']?></input> 
<?php endforeach; ?> 
0

我已經爲文件中的main/sub標題做過這種樹結構。

您可以使用遞歸函數來檢索下一個問題。您可以管理在遞歸函數內部將檢索多少個問題。

建議:

當你的表結構,使用的是兩個表。您可以使用一個表格來完成問題,並可以使用選項表格來尋找答案。因爲下一個問題也是另一個問題。這意味着與問題有一對一的一對一關係。

Tables: 
question : (id,optionId,questionText, nextQuestionId) 
pk - id 
foreign key - optionId 

option: (id, optionText, questionId) 
foreign key - questionId 
PK - id 

我認爲這會對您有所幫助。

此信息對您也有幫助。

Understanding Recursion in PHP/mysql

+0

嵌套集模型這​​裏的問題是,一個問題有多個選項... – user1584103 2013-05-10 14:15:54

+0

是。使用另一個表來存儲選項。喜歡這個。 選項:(id,optionText,questionId) – cha 2013-05-10 16:39:22