php: Mysql: дизайн базы данных банка вопросов - PullRequest
0 голосов
/ 15 мая 2011

У меня проблема с проектированием базы данных для php-проекта банка вопросов, в котором

пользователь может создавать вопросы и назначать ему неограниченное количество ответов.

проблема заключается в том, что яв настоящее время храните вопросы следующим образом:

ID, вопрос, ответ
1, "цвет капота?", "green = hgreen, yellow = yellow"

Я сохраняю все Ответы с разделителями, и =, чтобы отделить реальное значение от значения, которое должно быть показано пользователю!.

так что приведенный выше пример будет

<span>Hood color</span>
<input type=checkbox value=hyellow>yellow
<input type=checkbox value=hgreen>green

какие-нибудь лучшие идеи?

Ответы [ 3 ]

1 голос
/ 15 мая 2011

Да, создайте другую таблицу для ответов:

Table Questions:
QuestionId
Question

Table Answers:
AnswerId
QuestionId
Answer (real answer)
Caption (caption to be shown to the user)

редактирование:

Выбор вопросов и ответов на них. Ничего не возвращает за вопросы без ответов.

select
  q.QuestionId,
  q.Question,
  a.AnswerId,
  a.Answer,
  a.Caption
from
  Questions q
  inner join Answers a on a.QuestionId = q.QuestionId

Измените inner join на left join, чтобы получить одну строку для вопросов без ответов. a. * будет иметь значение NULL в этих строках.

Другое решение, сначала запросите список вопросов и получите ответ на каждый вопрос:

select
  a.AnswerId,
  a.Answer,
  a.Caption
from
  Answers a
where 
  a.QuestionId = <QuestionId you retrieved before>
0 голосов
/ 15 мая 2011

пользователей таблицы и ответы таблицы (с 2 или более столбцами, такими как "right_answer" и "неправильный_ответ" ...), возможно, вы можете использовать инструментальные средства mysql для создания структуры базы данных =)

0 голосов
/ 15 мая 2011

PHP имеет довольно хорошую поддержку JSON, вы можете сохранить его в виде строки JSON ({"green": "hgreen", "yellow": "hyellow"})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...