0

我正在为非营利组织开发一个 webapp,我想知道用于获得以下效果的最佳数据结构是什么:

该应用程序将包括从用户那里获取信息,类似于游戏中的 21 个问题,但不仅仅是是或否,例如,我可以向用户提出 3 个严肃的问题。基于这些答案,将会有另一组 X 问题。这组问题会根据前 3 个问题的答案而有所不同。

这将一直持续到应用程序找到答案为止。

也许像一棵有很多树枝的树。

尽管我在 PHP 和 MySQL 方面的经验有限,但我希望能够想出一个足够灵活的结构,以拥有树的许多分支和理想情况下可以存储在数据库或其他地方的许多级别。

任何帮助或想法将不胜感激。

4

2 回答 2

0

在数据库中存储树数据的一种常用方法是添加标识左右邻居和父级的列。CakePHP 框架提供了一种使用Tree Behavior轻松操作在树中组织的数据的方法。即使您不想使用 CakePHP,您也可以阅读文档以了解他们是如何实现它的。

于 2013-09-27T17:56:12.787 回答
0

我们通常喜欢在 SE 的这一侧查看示例和错误消息,但是将所有这些问题存储在 MySQL 数据库中会相当方便。该算法会有所不同,具体取决于您希望问题如何改变。

您可以安排它,使屏幕上的每个问题都有自己的路线,使用 ID 来控制路线:

  • 问题 1 (id 10) | 答案 1 (+10) | 答案 2 (+20) | 答案 3 (+30)
  • 问题 2 (id 11) | 答案 1 (+20) | 答案 2 (+10) | 答案 3 (+30)
  • 问题 3 (id 12) | 答案 1 (+20) | 答案 2 (+30) | 答案 3 (+10)

如果我们说用户选择了 2|3|1:

  • 问题 4 (id 30)
  • 问题 5 (id 41)
  • 问题 6 (id 32)

由于第一个数字不同,而且我们仅以 10 为单位递增,因此您每次运行都不会遇到任何重复的问题。


另一种方法是明确定义下一个问题集:

  • 问题 1 (id 1) | 答案 1 (5) | 答案 2 (12) | 答案 3 (9)
  • 问题 2 (id 2) | 答案 1 (7) | 答案 2 (16) | 答案 3 (18)
  • 问题 3 (id 3) | 答案 1 (4) | 答案 2 (10) | 答案 3 (24)

再次,用户选择 2|3|1:

  • 问题 4 (id 12)
  • 问题 5 (id 18)
  • 问题 6 (id 4)

应用程序的其余部分只需要您运行查询以提取问题、跟踪用户数据(get/post/session/mysql whathaveyou)并将结果保存到数据库(如果您想要这样做)。AJAX 在回答完每一组之后可能会很高兴地提出下一个问题。

于 2013-09-27T17:59:12.173 回答