2013-09-27 2 views
0

Я работаю на веб-приложение для некоммерческих и мне было интересно, что было бы лучше структура данных, используемая для получения следующего эффекта:PHP Условные Вопросы Структура данных

Приложение будет состоять получения информации, полученной из пользователь, похожий на игру 21 вопрос, но с более чем Да или Нет, например, я мог бы задать пользователю 3 вопроса. На основе этих ответов будет еще один набор X вопросов. Этот набор вопросов будет отличаться в зависимости от ответов первых 3.

Это будет продолжаться до тех пор, пока приложение не выяснит ответ.

Возможно, что-то похожее на дерево со многими ветвями.

Хотя у меня ограниченный опыт работы с PHP и MySQL, я бы хотел думать о структуре, которая была бы достаточно гибкой, чтобы иметь много ветвей дерева и многие уровни, которые идеально могут быть сохранены в базе данных или где-то остальное.

Любая помощь или идеи были бы весьма признательны.

ответ

0

Обычно нам нравятся примеры и сообщения об ошибках на этой стороне SE, но было бы довольно удобно хранить все эти вопросы в базе данных MySQL. Алгоритм будет отличаться в зависимости от того, как вы хотите, чтобы вопросы менялись.

Вы можете расположить его так, чтобы каждый вопрос на экране имеет свой собственный маршрут, используя идентификатор управления маршрут:

  • Вопрос 1 (идентификатор 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 (идентификатор 4)

остальные приложения просто требуют, чтобы выполнить запрос, чтобы тянуть вопросы, следить за данными пользователя (получить/запись/сеанс/MySQL whathaveyou) и сохранить результаты в БД, если это w которую ты хотел сделать. AJAX, вероятно, будет довольно милым, чтобы ответить на следующие вопросы после ответа на каждый набор.

+0

Хм, я полагаю, это достаточно близко, что я буду отмечать это как ответ. Моя ситуация больше похожа на нечто подобное. Ответьте на Q1, Q2 и Q3. Поведет ли вас на вопрос 4, 5, 6 или 10,11,12. Это, в свою очередь, может привести вас к 15, 16,17. И т. Д. – user1416564

+0

Да, это крутой бит. Как только вы получите логику того, как вы хотите выбрать следующий набор вопросов, нужно разработать формулу для достижения результатов. Обычно я использую точечную систему, вы можете сделать ее такой простой или сложной, как хотелось бы, хотя я бы рекомендовал держать ее простой. (Метод KISS) – Jason

0

Обычный способ хранения древовидных данных в базе данных - добавлять столбцы, идентифицирующие левый и правый сосед и родительский. CakePHP framework позволяет легко манипулировать данными, организованными в дереве, с помощью Tree Behavior. Даже если вы не хотите использовать CakePHP, вы можете прочитать документацию, чтобы узнать, как они ее реализуют.

Смежные вопросы