Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты / 7 сообщений из 7, страница 1 из 1
07.08.2013, 14:08
    #38358286
MortalArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
Ситуация такая:
1) есть конструктор анкет, структура которых в последующем будет храниться в БД. Анкета состоит из вопросов, у которых есть 4 типа (простой, выбрать один вариант ответа, выбрать несколько вариантов ответа, и по типу таблицы). В связи с этим была создана просто таблица вопросов с полями: Id(A_I), AnkName, Questions, Type, Header(null default), Variants(null default). Если вариантов или вопросов несколько, разделяются "||".
2) по таблице вопросов строится анкета, ну тут понятно, просто выбираются все названия без повторений, и для выбранного выбираются все вопросы, и в соответствии с типом, строится html элемент для ввода ответов. Вроде бы все хорошо, но возникает проблема с хранением ответов, так как их необходимо связать. Будет вестись статистика по типу: сколько людей ответило так то на такой-то вопрос и так-то то на другой ... и т.д.. Если структура таблицы будет такой:
Id(A_I), QuestionName, Answer, Date, AnkId, где AnkId например будет общим у всех ответов одной анкеты, т.е. при первом заполнении всем ответам он будет = 1, при втором =2 и т.д. То вот как тут сделать выборку опирающуюся на несколько строк своим условием? Что-то вроде "выбрать число всех строк, сгруппированных по AnkId где при одинаковом AnkId и конкретном значении Answer1 при Question1 ... AnswerN при QuestionN. "

Такой же запрос невозможен? Может подскажете, как лучше изменить структуру БД?
Заранее извиняюсь, если что не понятно объяснил.
...
Рейтинг: 0 / 0
07.08.2013, 14:42
    #38358353
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
MortalArtТакой же запрос невозможен?
Возможен. Только задание для него надо сформулировать точнее и не в "строках", а в
терминах бизнес-объектов. Т.е., например, "сколько людей, на вопрос 1 дали ответ 1 И на
вопрос 2 дали ответ 2". В этом случае запрос сводится к тривиальному group by + having +
derived table.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.08.2013, 14:52
    #38358379
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
MortalArt,

Была уже такая ветка. Юзай поиск. )))
...
Рейтинг: 0 / 0
07.08.2013, 15:28
    #38358437
MortalArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
Dimitry Sibiryakov, спасибо за ответ.

Под derived table имеется ввиду Select from select ?

Т.е. получается что-то вроде
Код: plaintext
SELECT ? FROM SELECT COUNT(*) FROM `answers` WHERE (Question = вопрос1 или Question = вопрос2 или Question = вопрос3) GROUP BY `AnkId` HAVING (Answer = ответ 1 или Answer = ответ 2 или Answer = ответ 3)
?
...
Рейтинг: 0 / 0
07.08.2013, 17:43
    #38358665
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
MortalArtТ.е. получается что-то вроде
Примерно так, только условия совершенно другие.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.08.2013, 17:59
    #38358692
MortalArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
Dimitry Sibiryakov, а какие, вы не подскажите?)
...
Рейтинг: 0 / 0
07.08.2013, 19:51
    #38358812
MortalArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты
Хм, походу разобрался, может кому пригодиться, получилось вот-так:
Код: plaintext
SELECT * FROM `answers` WHERE ((`Question` = 'Вопрос1' AND `Answer`='Ответ1') OR (`Question` = 'Вопрос2' AND `Answer`='Ответ2')) GROUP BY AnkId HAVING COUNT(AnkId) > 1
Это если интересуют два ответа. При трех например и более увеличивается кол-во условий в WHERE и COUNT >= n-условий
Ну и проверку на принадлженость к названию анкеты не сложно так же в WHERE добавить
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ищу совет по оптимальному проектированию БД для вопросов и ответов анкеты / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]