Если вы хотите использовать PHP-приложение для опросов, я думаю, для ясности вам нужно что-то, где:
- один пользователь может добавить тему (автомобиль в вашем примере).
- может быть произвольное количество вопросов, прикрепленных к теме этим пользователем
- каждый вопрос может принимать несколько типов ответов: да / нет (ввод флажка), число (ввод текста или, скажем, 10 радиокнопок со значениями от 1 до 10 и т. Д.), Одиночный или множественный выбор (выберите с или без атрибута multi) ), произвольные данные (textarea). Кроме того, некоторые вопросы могут содержать комментарии / поле «прочее, пожалуйста, объясните».
- любой другой пользователь может ответить на все вопросы, и все они сохраняются.
Более сложная версия потребует различных наборов вопросов, основанных на ответах, которые были даны ранее, но я надеюсь, что это выходит за рамки этого вопроса.
Для этого, я думаю, вам нужно несколько таблиц:
Предметы
id int pri_key и все, что может прийти на ум: бренд, тип и т. д.
Вопросы
id int pri_key , текст varchar , тема int f_key , тип int / enum /?
QuestionOptions
id int pri_key , вопрос int f_key , опция varchar
Пользователи
id int pri_key + независимо от вашей структуры аутентификации
UserReplies
пользователь int f_key , вопрос int f_key , ответ varchar , комментарии varchar
Пользователь-создатель устанавливает тему и задает к ней несколько вопросов. Каждый вопрос знает, какой это тип - поле «тип» может быть целым числом или значением enum, я сам предпочитаю хранить такие данные как целое число и определять константы в php, используя что-то вроде QTYPE_MULTISELECT или QTYPE_BOOLEAN для удобства чтения.
Для вопросов с одним / несколькими вариантами пользователь-пользователь также заполняет таблицу QuestionOptions, в которой хранятся параметры для тега select.
Для отображения всех вопросов будет что-то вроде
SELECT Questions.id, Questions.text, Questions.type, GROUP_CONCAT (CONCAT (questionOptions.id, questionOptions.option)) в качестве параметров AS
ОТ ВОПРОСОВ ОСТАВЛЕННЫХ ВОПРОСОВ ВопросыOptions ON (Вопросы.type = $ select AND Questions.id = QuestionsOptions.question)
WHERE Questions.subject = $ subject
GROUP BY Questions.id
GROUP_CONCAT и CONCAT здесь должны быть изменены так, чтобы они возвращали что-то вроде 5: Option_One; 6: Option_Two и т. Д., Так что взорвать данные не составит большого труда.
Я понимаю, что это не самый чистый подход с точки зрения производительности и оптимизации, но он должен подойти для небольшого проекта.
Существует также недостаток в вышеупомянутой схеме в том, что ответы на «вопрос с несколькими ответами» хранятся в развернутом виде в поле «ответ» таблицы UserReplies. Лучше добавить еще одну таблицу, в которой каждая запись содержит значение параметра, выбранное пользователем для того или иного вопроса. Таким образом, в базе данных не будет ненужной денормализации, и запросы на статистику будут намного проще (т. Е. Запросить, какие варианты наиболее популярны в одном вопросе)