2013-05-09 102 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