Я работаю с webapp для некоммерческой организации, и мне было интересно, какая будет лучшая структура данных, используемая для получения следующего эффекта:
Приложение будет состоять из получения информации от пользователя, похожего на вопросы игры 21, но с более чем Да или Нет, например, я мог бы задать пользователю 3 вопроса. На основе этих ответов будет еще один набор X вопросов. Этот набор вопросов будет отличаться в зависимости от ответов первых 3.
Это будет продолжаться до тех пор, пока приложение не выяснит ответ.
Возможно, что-то вроде дерева с множеством ветвей.
Хотя у меня ограниченный опыт работы с PHP и MySQL, я бы хотел подумать о структуре, которая была бы достаточно гибкой, чтобы иметь много ветвей дерева и многие уровни, которые идеально могут быть сохранены в базе данных или где-то еще.
Любая помощь или идеи будут высоко оценены.
Обычно нам нравится видеть примеры и сообщения об ошибках на этой стороне SE, но было бы довольно удобно хранить все эти вопросы в базе данных MySQL. Алгоритм будет отличаться в зависимости от того, как вы хотите, чтобы вопросы менялись.
Вы можете организовать его так, чтобы каждый вопрос на экране имел свой собственный маршрут, используя ID для управления маршрутом:
И если мы скажем, что пользователь выбирает 2 | 3 | 1:
Поскольку первая цифра отличается, и мы увеличиваем только на 10, вы не столкнетесь с какими-либо дублирующимися вопросами за каждый прогон.
Другой способ заключается в явном определении следующих наборов вопросов:
И снова пользователь выбирает 2 | 3 | 1:
Остальная часть приложения просто потребует от вас выполнить запрос, чтобы вытащить вопросы, отслеживать данные пользователя (get / post / session / mysql whathaveyou) и сохранить результаты в db, если это то, что вы хотели сделать. AJAX, вероятно, будет довольно милым, чтобы ответить на следующие вопросы после ответа на каждый набор.
Общим способом хранения древовидных данных в базе данных является добавление столбцов, идентифицирующих левого и правого соседа и родителя. CakePHP Framework предлагает способ легко манипулировать данными, организованными в дереве, используя Tree Behavior . Даже если вы не хотите использовать CakePHP, вы можете прочитать документацию, чтобы узнать, как они ее реализуют.