在php中检索树结构中的数据

时间:2013-05-09 12:16:55

标签: php mysql symfony symfony-2.1

目前我正致力于在symfony2.2框架中创建apis。

我必须从数据库中检索一堆问题和答案。

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

我的数据库结构如下:

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

在上图中,有一个根问题,它有2个选项A1和A2。

在选择A1时,必须将用户重定向到Q2,依此类推。依次类推。

注意:用户可能无法回答所有问题。

现在我需要找到最佳方式:

1:从数据库中检索数据。

2:在Json文件中格式化问题。

3 个答案:

答案 0 :(得分:0)

确定。首先从数据库中获取a1的密钥和存储的a2,现在根据您的选择从不同的表中检索数据,只需匹配id(从A1和A2中选择)并检索与您的选择ID匹配的数据,然后执行此操作等等。

答案 1 :(得分: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; ?>

答案 2 :(得分:0)

我已经为文档中的主/子标题完成了这种树结构。

您可以使用递归函数来检索下一个问题。您可以管理在递归函数内检索的问题数量。

<强>建议:

作为表结构,您使用两个表。您可以使用一个表格来解决问题,并可以使用选项表来获取答案。因为下一个问题也是另一个问题。这意味着与问题存在一对一的关系。

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

相关问题