[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Таблицы для анкеты
Adva
Анкета имеет вид.

Цитата
1. Вопрос вопрос вопрос?
- Вариант ответа 1
- Вариант ответа 2
- Вариант ответа 3

2. Вопрос вопрос вопрос?
- Вариант ответа 1
- Вариант ответа 2
- Другое (написать) - тут нужно текстовое поле

3. Вопрос вопрос вопрос?
- Вопрос вопрос?
----- Да
----- Нет
- Вопрос вопрос?
----- Да
----- Нет

4. Данные о себе:
- Возраст
- Пол
---- М
---- Ж
- Род занятий
- Место жительства


Опрос будет проводиться на 1 компьютере, т.е. человек подходит к компу заполняет анкету, дальше подходит другой тоже отвечает на вопросы.

Интересует меня как вообще составить таблицы в mysql? чтобы все было управляемо из админки, чтобы можно было добавлять или удалять вопросы.

Последний вопрос это данные о себе, если не регистрировать пользователя до того как он начнет голосовать, можно прикрепить его ответы к его анкете?

Напрмиер чтобы администратор мог видеть как на первый вопрос ответил Вася Пупкин.



Спустя 26 минут, 1 секунда (8.09.2009 - 14:38) waldicom написал(а):
Было бы неплохо понять, какие сущности будут использованы.
Например точно будет пользователь. Вот уже одна таблица есть. Есть вопросы. Это вторая таблица. Есть ответы на вопросы (третья таблица).
Потом надо подумать, как хранить ответы. Например можно в одной таблице хрнаить номер пользователя, номер вопроса и номер ответа (primary key на все три поля, чтобы на один вопрос множество ответов).
А потом все это можно развивать дальше

Спустя 24 минуты, 20 секунд (8.09.2009 - 15:02) Adva написал(а):
пользователя отменяем =) уже не нужен.

вот этот вопрос можно записать либо так как он есть, т.е. есть вопрос, есть подвопрос.
Цитата
3. Вопрос вопрос вопрос?
- Вопрос вопрос?
----- Да
----- Нет
- Вопрос вопрос?
----- Да
----- Нет

а можно:
Цитата
3. Где ты был?
- В Испании
- Во Франции
- В Германии
- Нигде не был

но так нужно чтобы пользователь мог выбрать либо несколько вариантов ответов 1,2,3 либо "нигде не был", но чувствую что на программном уровне это не сделать...

поэтому остановлюсь на первом варианте.

Таблицы думаю сделать следущие:

вопросы:
Цитата
id - ид вопроса
id2 - ид подвопроса
param - либо 1 вариант ответа можно выбрать либо несколько (выставлять либо 1 либо 0)


варианты ответов:
Цитата
id - ид ответа
idq - ид вопроса
golos - количество голосов
txt_act - если 1, то выводим текстовое поле, если 0 то не выводим
text - это текст который может вписать пользователь, например если выберет "Другое" (указать что)


пользователь:
Цитата
name - имя
sex - пол
address - адрес


правильно мыслю? или где-то ошибся?

Спустя 23 минуты, 13 секунд (8.09.2009 - 15:25) waldicom написал(а):
Я не совсем понимаю вот это.
1.
Цитата
пользователя отменяем =) уже не нужен.


2.
Цитата
пользователь:
name - имя
sex - пол
address - адрес


Так нужен пользователь или нет?

Спустя 29 минут, 46 секунд (8.09.2009 - 15:55) Adva написал(а):
пользователя не надо привязывать к вопросам...
но 7м вопросом информация о пользователе, т.е. по сути это тоже вопрос, но так как он не подходит под шаблон обычного вопроса я думаю сделать отдельную таблицу.

Спустя 3 часа, 23 минуты, 44 секунды (8.09.2009 - 19:19) hara_ написал(а):
нуу какие варианты

если количество вариантов ответа ограничено то столбцы:
id question answer1 answer2 answer3 valid_answer

ну и таблица с пользователями: если 1 пользователь может проходить тест 1 раз
то сразу в той таблице и указывать на что он там ответил и как, если нет
то отдельно таблицу для пользователей, отдельно для ответов

показывай свои варианты их тебе раскритикуют)

Спустя 2 дня, 18 часов, 25 минут, 53 секунды (11.09.2009 - 13:45) Adva написал(а):
Цитата
<input type="checkbox" name="variant[534]" value="1"> Франция<br/>
<input type="checkbox" name="variant[534]" value="2"> Англия<br/>
<input type="radio" name="variant[534]" value="3"> Нигде не был<br/>


вот примерно такое можно вывести из базы, 544 - это id вопроса.
1,2,3 - это id ответа

но тогда надо чтобы когда пользователь отметит "Нигде не был" убирались все отмеченные ранее чекбоксы и наоборот, если он отметит сначала "Нигде не был", а потом захочет выбрать еще и "Францию", надо чтобы радио-кнопка опять была неотмечена.

Спустя 12 минут, 35 секунд (11.09.2009 - 13:57) hara_ написал(а):
это уже совсем другой вопрос и для него лучше создавать отдельную тему
в разделе javascript

не радиокнопка а checkbox это во первых, во вторых, от вас нужны ваши решения этого вопроса. как уже сказал делать это нужно на javascript
при нажатии на чекбокс "нигде не был' нужно обходить все остальные и збрасывать в них значения.
ну и так далее по смыслу.

Спустя 3 часа, 27 минут, 47 секунд (11.09.2009 - 17:25) HardWoman написал(а):
Цитата
id - ид ответа
idq - ид вопроса
golos - количество голосов
txt_act - если 1, то выводим текстовое поле, если 0 то не выводим
text - это текст который может вписать пользователь, например если выберет "Другое" (указать что)


Неверное решение.

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

А вот Другое - это значение переменное и зависит от количества пользователей, ответивших на вопрос.
Во первых - у вас будут много незаполненных полей текст - что противоречит полностью нормализации таблиц (есть такое понятие в архитектурах баз данных)
Для текста - нужно делать отдельную таблицу.

Далее зачем в таблице создавать дополнительный столбец для вывода поля, когда это можно решить посредством скрипта.(txt_act - если 1, то выводим текстовое поле, если 0 то не выводим)
То есть у вас есть ID Другое - если он приходит в скрипт - выводите поле.
Или же если вы хотите уже выводить значения с какими либо переключателями тогда поле статус. чекбокс, редио, селект, текст.
Но приходить в скрипт будет все равно не id статуса - а ID значения Другое


Только все равно таким образом полностью решить проблему вывода, как вы пытаетесь не получится - потому, как редио или чекбокс могут у вас группироваться на одной странице. К разным вопросам - свой набор редио


Я не настаиваю на своем решении, потому как сама только учусь, просто предлагаю подумать.

Далее вопрос к вам - вы уверены, что уровне вложенности по вопросам - подвопросам у вас будут одинаковы? если нет - то архитектурное решение таблиц будет совсем иным, нежели вы описали - это уже будут иерархии

hara подсказал неправильное решение таблиц. Так сделать не получится. Это архитектурно неверное решение.

Спустя 2 часа, 32 минуты, 59 секунд (11.09.2009 - 19:58) Гость_hara написал(а):
ну да пропустил что там и подвопросы могут быть.




Спустя 20 минут, 6 секунд (11.09.2009 - 20:18) HardWoman написал(а):
Гость_hara
Не поэтому.

Дело в том, что ответы - это значения их может быть много (дело в том что в случае автора - значения предустановлены - но нем не менее не перестают быть значениями) - и создавать на каждое свое поле в таблице - аморально smile.gif при вашем подходе имея 100 ответов нужно создать 100 столбцов? То есть на один вопрос будет 100 колонок под значения?

И что это будет? я так понимаю, что в колонки ответов - вы хотите ввести счетчик по каждому?

И на каждый вопрос делать отдельную таблицу?


id question answer1 answer2 answer3 valid_answer


Честно сказать даже не поняла, какую цель вы преследовали создав такую таблицу

Спустя 11 часов, 54 минуты, 10 секунд (12.09.2009 - 08:12) Гость_hara написал(а):
Ну я же не говорил что не нужно пользоваться головой при составлении таблицы.
Но да если в кажном вопросе по 50 вариантов ответов пусть будет 50 столбцов,
но если в одном 2 в другом 50 то это уже не катит. (хотя если учесть что я не прочитал внимательно дальше первого поста, то я не предполагал что их будет больше 10)

И уж тем более я не предлагал заводить отдельную таблицу для каждого вопроса.
Вот какой был вариант:


id question answer1 answer2 answer3 valid_answer
1 вопрос1 ответ1 ответ2 ответ3 3 (то есть верный ответ номер три)
2 вопрос2 ответ1 ответ2 ответ3 2 (ну а тут верный ответ "ответ2")

Какие счётчики, это статическая таблица(после того как в неё добавили вопросы и варианты ответов), - туда ничего не пишется, только читается.

+ таблица с пользователями где имя и т.д. и т.п. и если 1 пользователь может проходить 1 тест,
1 раз - а это скорее всего так, - т.к. он обязан заполнять данные о себе прямо в тесте.

вот и получается что
id name email и т .д. потом valid_answers
1 harry harry@yahoo.com 16 (16 верных ответов из (сколько их там в тесте?))
если нужен отчёт по каждому ответу, то добавить ещё поле в которое всё это закинуть..

-------------------------------------------------------------------------------------------------------------
Ну я уже говорил что не прочитал то что нужно было, ошибся, каюсь, совсесть не мучает )

Спустя 3 часа, 10 минут, 12 секунд (12.09.2009 - 11:22) HardWoman написал(а):
Может нас рассудят более опытные коллеги? Я так совсем запуталась и не понимаю,

Ни что это за таблица (ваша)
Ни как можно под значение отдавать столбец.


Ну да есть способ хранения иерархий, называется - матрица смежности - такой древний образовательный классицизм.

Им кто то пользуется? Его обычно рассматривают как один из способов хранения иерархий в учебниках. Но любые иерархии используются для обозначения пути к объекту, а не к его значениям

Но ведь все равно ответы - это не часть пути это значения. А сам объект - ответы.

да и ваша таблица к матрице смежности не имеет никакого отношения. В ней как правило первый столбец отводиться под все возможные значения пути. И эти же значения повторяются в остальных столбцах. И на пересечении значений , участвующих в ветке, ставится 1. Так и обозначается путь.

Этот способ архивный и на практике не используется. Слишком нерациональное использование таблиц.

У вас не матрица смежности, это точно - какие то признаки ее, что ли

Вы же предлагаете не только объект засунуть в матрицу смежности, но и его значения.

Рассудите - эксперты

Спустя 35 минут, 40 секунд (12.09.2009 - 11:58) FatCat написал(а):
ИМХО, 4 таблицы. Таким образом, максимум 3 джойна в запросах - нормально по нагрузке.
Таблица вопросов: айдишник по инкременту, айдишник родительского вопроса (для вложенных), текст вопроса.
Таблица ответов: айдишник по инкременту, айдишник вопроса, текст ответа.
Таблица юзеров: айдишник юзера по инкременту, данные юзера.
Таблица анкет: айдишник заполнения по инкременту, time() заполнения, айдишник юзера, айдишник вопроса, айдишник ответа.

Спустя 1 час, 54 минуты, 45 секунд (12.09.2009 - 13:53) Гость_hara написал(а):
to HardWoman

просто к слову:
матрица смежности, классицизм, иерархии, объекты - у меня аллергия на такие слова,
там где без них можно обойтись. Вы всегда и везде так пишите?
Нет правда вы когда нибудь задумывались о том что вас ещё должны понимать другие люди?
И я думаю тут дело не в том что я тупой, - а в том, что бы мне допустим полностью
понять ваш пост, нужно напрячся горяздо сильнее чем если бы вы написали тоже самое только как то попроще (такие слова ни как не добавляют значимости тексту))
сейчас чуствую будете кидаться тухлыми помидорами в меня и говорить что всё от
безграмотности или ещё чего.
ну да ладно, возможно другие воспринимают это совсем не так как я.

а по делу:
Я разве не по - русски два раза написал что я ошибся?
это что разговор для разговора? какой в этом смысл?

ага поймите правильно

Спустя 46 минут, 59 секунд (12.09.2009 - 14:40) HardWoman написал(а):
Я просто не в вашей ошибке пытаюсь разобраться - а в самом принципе построения вашей таблицы - что там и для чего. Не потому, что хочу найти там ошибку, а потому, что мне интересно, может я сама чего не знаю.

Потому и просила мнения экспертов.

А говорить проще - куда уж проще. есть разные способы хранения иерархий и каждый по своему обзывается. Для каждого способа строятся свои таблицы и свои связи.

Матрица смежности один из них. Я достаточно подробно расписала принцип ее построения.

В вашей таблице я увидела именно ее признаки (но не ее саму)

Ну чест слово - не моя вина в том, что умные люди как то классифицировали все эти способы и дали им названия.

И не моя вина, что вы посчитали это трудно перевариваемой информацией, а не побежали в поисковик, чтоб почитать об этом.

Скажу вам более - вы наверняка знаете больше меня и практики у вас больше. Я к сожалению своему нахожу пока время только на теорию.

теперь вы можете кинуть в меня тухлыми помидорами. для меня общение в этом посте не возможнсть блеснуть знаниями, а узнать что то новое. задание у ТС, хоть и не очень сложное, но достаточно необычное.

Так что если вам показалось, что я вас задела - ну простите слезно.

Вместо препирательств лучше бы пояснили вашу таблицу, пусть не под задание ТС, а под ваше собственное которое вы усмотрели. А то я все мозги сломала, пытаясь понять зачем вы ее так построили

Спустя 22 часа, 7 минут, 37 секунд (13.09.2009 - 12:47) Adva написал(а):
я вообще запутался...

анкета очень не стандартная, вопросы могут быть любые, с любым количеством ответов, с чекбоксами и с радио.

вот пример для наглядности: http://itay.ru/123.html

Спустя 2 часа, 29 минут, 21 секунда (13.09.2009 - 15:17) HardWoman написал(а):
Вы бы для начала правильно формулировали задание тогда и путанницы было бы меньше.

Одинаковые ли у вас уровни вложенности - вопрос/подвопрос

Или для разных вопросов будут разные? Допустим для одного 3 уровня, для другого два.
Для каких целей у вас сделана статистика кто ответил - мужчина или женщина и таблица юзер - если вы никаким образом не привязываете ответы к юзерам?

Для чего вам тогда таблица юзеров?

Вы бы не показывали, как хотите сделать, а объяснили что и зачем.
А то как то помежду прочим прозвучало - чтоб мог редактировать вопросы - подвопросы, создавать новые.

дайти четкие условия. уровень вложенности для всех вопросов два (как пример)

Или сам не знаю какие понадобятся. И как вы хотите выводить переключатели - в автоматическом режиме? и добавлять их? к вариантам ответов при редактировании. Как часто ваша анкета будет подвергаться модификациям?

Спустя 1 час, 43 минуты, 19 секунд (13.09.2009 - 17:00) Adva написал(а):
Цитата
Одинаковые ли у вас уровни вложенности - вопрос/подвопрос

все варианты отображения вопросов и ответов я отобразил в файле по ссылке выше.
Могут быть просто
- ОТВЕТ1
- ОТВЕТ2

а может быть
* Отет1
---- Ответ11
---- Ответ12
---- Ответ13
* Ответ2

а может быть

* Ответ1
* Ответ 2

"-" чекбоксы
"*" - радио кнопки

т.е. я так понимаю максимум 2 уровня

Цитата
Для каких целей у вас сделана статистика кто ответил - мужчина или женщина и таблица юзер - если вы никаким образом не привязываете ответы к юзерам?

я выше писал что мне не нужно связывать таблицу юзеров с вопросами и ответами. Можете на юзеров не обращать внимания.

Цитата
Как часто ваша анкета будет подвергаться модификациям?

я думаю это не важно, если будет все автоматически создаваться и редактироваться через админку.

Цитата
И как вы хотите выводить переключатели - в автоматическом режиме?

Если бы я знал точно, я бы не спрашивал тут на форуме это...

Спустя 42 минуты, 47 секунд (13.09.2009 - 17:43) Гость_hara написал(а):
посмотрите вариант который привёл FatCat на первой сранице.
возможно что то измените, но в общем рассмотрите его

Спустя 3 часа, 1 минута, 9 секунд (13.09.2009 - 20:44) Adva написал(а):
Цитата
ИМХО, 4 таблицы. Таким образом, максимум 3 джойна в запросах - нормально по нагрузке.
Таблица вопросов: айдишник по инкременту, айдишник родительского вопроса (для вложенных), текст вопроса.
Таблица ответов: айдишник по инкременту, айдишник вопроса, текст ответа.
Таблица юзеров: айдишник юзера по инкременту, данные юзера.
Таблица анкет: айдишник заполнения по инкременту, time() заполнения, айдишник юзера, айдишник вопроса, айдишник ответа.


таблица юзеров уже не нужна, следовательно можно обойтись и без таблицы анкет.

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

Таблица вопросов:
quest_id
quest_text

Таблица ответов:
var_id
var_idq - ид вопроса
var_txt - ответ
var_type - 1 - checkbox; 0 - radio
var_idv - 0 - главный ответ; >0 значит подответ

Например
3 | 5 | Где то был | 0 | 0
4 | 5 | Франция | 1 | 3
5 | 5 | Германия | 1 | 3
6 | 5 | Нигде не был | 0 | 0

вот это выведет:
* Где то был
---- Франция
---- Германия
* Нигде не был

Или я ошибаюсь?

по моему эта система рабочая, но тогда очень тяжело придумать как будет создаваться опрос в админке, надо ведь предусмотреть если родительский ответ чекбокс, то подответ не может быть радиокнопкой и вот такие подобные комбинации (если родительский ответ радио, то к этому же вопросу нельзя сделать чекбокс родительским)



Спустя 1 минута, 57 секунд (13.09.2009 - 20:46) HardWoman написал(а):
я завтра подумаю - интересная задача - для автоматизации - сегодня сил уже нет

Спустя 9 минут, 30 секунд (13.09.2009 - 20:55) Гость_hara написал(а):
Ну вроде ничего так ага.
Цитата

(если родительский ответ радио, то к этому же вопросу нельзя сделать чекбокс родительским)

почему ?

Спустя 4 минуты (13.09.2009 - 20:59) Гость_hara написал(а):
ну да у подответов должны быть idшники родительских ответов ))
ну можно сделать и так что если var_idv > 0 то
var_idq - ид ответа родителя а не вопроса.. но потом вытаскивать всё это..
лучше добавить столбец с id ответа родителя

Спустя 7 часов, 46 минут, 53 секунды (14.09.2009 - 04:46) Adva написал(а):
Цитата
почему ?

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

Цитата
лучше добавить столбец с id ответа родителя

idv это ведь итак ид родителя =)

Спустя 3 часа, 5 минут, 57 секунд (14.09.2009 - 07:52) Гость_hara написал(а):
теперь понял о чём там было:
ну да если на одном уровне вложенности то в любом случае что то одно
или checkbox или radio - естественно, тут дело даже не в подружить а в
том что это получиться(не логично) ) если будет и то и то.
=>
ну так при выводе просто брать значение у первого ответа(check или radio)
а остальные игнорировать,
ну и в админке не давать создать такую неправильную структуру

Спустя 3 часа, 2 минуты, 16 секунд (14.09.2009 - 10:55) FatCat написал(а):
Цитата (HardWoman @ 13.09.2009 - 16:17)
Одинаковые ли у вас уровни вложенности - вопрос/подвопрос

Или для разных вопросов будут разные? Допустим для одного 3 уровня, для другого два.

Это решается полем "родительский вопрос" в таблице вопросов. Любое количество уровней вложенности, хоть 500; для вывода страницы дерево вложений разматывается в цикле.


Цитата (HardWoman @ 13.09.2009 - 16:17)
А то как то помежду прочим прозвучало - чтоб мог редактировать вопросы - подвопросы, создавать новые.

Посмотрите форумную базу. По сути то же самое.
Форумы - те же вопросы. Для быстродействия можно ограничить уровни вложенности (как у нас), но возможны и беконечные вложенности (как в двушках).
Топики - те же ответы.
Юзеры - и есть юзеры.
Посты в топиках - ответы юзеров.
4 таблицы, всё редактируется, тянет сотни форумов, тысячи топиков и юзеров, сотни тысяч постов - в многопользовательском режиме.

Спустя 1 день, 5 часов, 14 минут, 33 секунды (15.09.2009 - 16:09) Adva написал(а):
вот что у меня на данный момент.

MySQL:
quest_id
quest_type - 0 - вопрос, 1 - radio, 2 - checkbox
quest_value - пока это поле не имеет значения никакого
quest_text - текст вопроса или ответа
parent_id - id родителя, если 0, то не имеет родителя.

вывод делаю такой функцией
PHP
// Параметры: переменная, куда будем формировать контент $content (по ссылке), массив из которого формируем (должен быть в специально форме)
function printChildMenu(&$content$menu) {
    // начинаем обход массива $menu в цикле по записям
    foreach($menu as $value) {
        // определяем тип
        if($value['quest_type']==0$type "<b>{$value['quest_text']}</b>";
        elseif($value['quest_type']==1) {
            $type "<input type=\"radio\" name=\"variant[{$value['parent_id']}]\" id=\"{$value['quest_id']}\" /> <label for=\"{$value['quest_id']}\">{$value['quest_text']}</label>";
            $onclick "onclick=\"choose(this, event);\"";
        }
        elseif($value['quest_type']==2$type "<input type=\"checkbox\" name=\"variant[{$value['parent_id']}]\" id=\"{$value['quest_id']}\" /> <label for=\"{$value['quest_id']}\">{$value['quest_text']}</label>";
        
        
        
// если у текущего элемента нет детей
        if(count($value['child'])==0)
            $content.="<li {$onclick}>{$type}</li>"// заносим элемент списка li
        // если у текущего элемента есть дети
        else {
            $content.="<li {$onclick}>{$type}<ul>"// заносим элемент списка li и открываем список детей
            printChildMenu($content$value['child']); // (рекурсивный вызов) обходим детей элемента для формирования списка
            $content.="</ul></li>"// заносим конец списка детей.     
        }
    }    
}


то что получилось можно посмотреть на http://itay.ru/quest/

не работает последний вопрос из-за $onclick = "onclick=\"choose(this, event);\"";, но если я это уберу, то у меня не будет работать второй вопрос.

Спустя 30 минут, 10 секунд (15.09.2009 - 16:39) HardWoman написал(а):
Мне всегда казалось что если можно обойтись без циклов - нужно обходиться без них. А если на циклах - список смежности.
Далее, если ответы не связаны с пользователем - их можно рассматривать как часть ветки.
Осталось связать некоторые элементы ветки с управляющими формами. И к одному элементу может быть несколько форм и помимо этого формы могут быть объединены в блоки. И поле текст просит свою таблицу.

А такой вариант
таблица1(список смежности)
ID авто
ID элемента
ID родителя

таблица 2
ID авто
ID элемента с переключателем
Статус управляющего элемента (редио, чекбокс итд)
Принадлежность к блоку элементов

И в самом скрипте проверять, поле текст, если текст - заносить в отдельную таблицу - ответы пользователей по полю Другое

ну и естественно мужчина женщина это не ветки - это в таблицу юзеров

Остальное отображение решать на строне пользователя - лучше аяксом (перекрывать другие управляющие формы - если логика требует того)

забыла еще таблицу
ID авто
Name элемента

Спустя 21 минута, 16 секунд (15.09.2009 - 17:01) Adva написал(а):
Цитата
Мне всегда казалось что если можно обойтись без циклов - нужно обходиться без них.

если бы я знал как сделать без циклов, я бы сделал без них smile.gif

HardWoman, пока что плохо понял как это все будет работать, попробую заполнить таблицы...

таблица 3
Цитата

element_id    |    element_name
+++++++++++++++++++++++
1                      Где вы были?
2                      А я был здесь:
3                      Нигде не был
4                      Франция
5                      Германия
6                      Порекомендуете ли вы нас друзьям?
7                      Да
8                      Нет


таблица 1
Цитата
table_id  |  table_element  |  parent_id
++++++++++++++++++++++++++
1                      1                    0
2                      2                    1
3                      3                    1
4                      4                    2
5                      5                    2
6                      6                    0
7                      7                    6
8                      8                    6


в итоге, я не понял как заполнять 2ю таблицу и не понял зачем первая таблица, если можно parent_id добавить в 3ю таблицу

Спустя 17 минут, 24 секунды (15.09.2009 - 17:18) HardWoman написал(а):
можно добавить в третью - а вторая для того, что у вас к элементу может быть несколько форм как вариант Другое - у вас там и черкбокс и текстовое поле.

Вы ведь сейчас сверстали ручками, куда дали ссылку? А вопрос стоял об автоматизации? Чтоб добавлять в админке вопросы, ответы и управляющие кнопки? видимо я не так вас поняла?

Я не даю вам советы - знаний пока мало - я просто пытаюсь решить задачу потому как мне она интересна

А в вашем варианте можно конечно объеденить и имя элементов - просто привычка - долгое время разбиралась с сылками в иерархиях - чтоб не писать одинаковых значений - выносила в отдельную ьаюлицу и сейчас привычка сработала

Спустя 1 час, 6 минут, 24 секунды (15.09.2009 - 18:24) Adva написал(а):
HardWoman
http://itay.ru/123.html - тут я руками все писал))
http://itay.ru/quest/ - а тут автоматизированно.

вот тут вот
[URL=http://phpforum.ru/index.php?showtopic=20763&st=0&#entry178608'>http://phpforum.ru/index.php?showtopic=207...=0&#entry178608</a>
я описывал как я думал сделать доп. тектовое поле к радио или к чекбоксу. Я так уже делал, в принципе работает, но вы сказали что так не правильно smile.gif

возможно =)
Цитата
Во первых - у вас будут много незаполненных полей текст - что противоречит полностью нормализации таблиц (есть такое понятие в архитектурах баз данных)
Для текста - нужно делать отдельную таблицу.


но сейчас проблема не в тектовом поле... его как-нибудь можно будет организовать.... а вот как сделать чтобы радиокнопки <a href='http://itay.ru/quest/]в 3ем вопросе [/URL] работали я вообще не знаю...

у меня варианта 2. Либо надо JS менять, либо дальше думать чем отличается " Нигде не был" от "Да" и "Нет". Оба пункта имеют радиокнопки и оба варианта не имеют подответов.
различие в том, что инпуту "нигде не был" нужно ставить onclick=\"choose(this, event);\", а "Да" и "Нет" не надо.

Спустя 34 минуты, 20 секунд (15.09.2009 - 18:59) HardWoman написал(а):
Цитата
id - ид ответа
idq - ид вопроса
golos - количество голосов
txt_act - если 1, то выводим текстовое поле, если 0 то не выводим
text - это текст который может вписать пользователь, например если выберет "Другое" (указать что)


Вообще то я не сказала, что это работать не будет
Я сказала, что таблица организованна неправильно.

Попробуйте заполнить эту таблицу и добавить текст с нескольких полей и вы поймете о чем я говорю.

У вас ветки понятие постоянное и как пользователь отметил ветку - добавляется 1 к счетчику, но вы еще в эту же таблицу втулили поле text - то есть таблица будет выглядеть 20 веток + 200 ответов текст

Столбец голос для поля текст будет пустой, а для ваших веток - столбец текст будет пустой.
Я же сказала почитайте о нормализации таблиц

Спустя 4 минуты, 37 секунд (15.09.2009 - 19:03) HardWoman написал(а):
Цитата

у меня варианта 2. Либо надо JS менять, либо дальше думать чем отличается " Нигде не был" от "Да" и "Нет". Оба пункта имеют радиокнопки и оба


Имена радио кнопкам разные при выводе давать.

Спустя 1 час, 11 минут, 50 секунд (15.09.2009 - 20:15) Adva написал(а):
HardWoman, помогли мне с JS =) теперь все работает.
Завтра почитаю про нормализацию и дальше будем делать))

я теоретическим понимаю что не надо делать поля которые будут пустые почти везде. Но еще я не понимаю как связывать потом эти 2 таблицы, это ведь лишние запросы.

Спустя 12 минут, 24 секунды (15.09.2009 - 20:27) HardWoman написал(а):
нет это не лишние запросы - это запрос с джойном - объединение таблиц - почитайте как построить запрос к нескольким таблицам

Спустя 25 дней, 14 часов, 1 минута, 32 секунды (11.10.2009 - 10:29) Adva написал(а):
_http://anketa.itay.ru/result.php
вот что у меня на данный момент

Цитата
id | type | value |                            text                             | parent_id
+++++++++++++++++++++++++++++++++++++++++++++
5      0         0      Бывали ли Вы на мероприятиях музея?        0
6      1         7      Да                                                              5
7      1         2      Нет                                                             5
8      2         0      Рождество в музее                                      6
9      2         2      Сударыня-масленица                                  6
10    2         2      Остров детства                                            6


вот так примерно составлена БД. Каким образом можно сделать чтобы при выводе результатов полоски у подответов (рождество в музее, сударыня-масленица, остров детства) выводился другим цветом (не зеленым).

возьмем к примеру ответ и подответ, они ничем не отличаются в базе, то что один из них по типу чекбокс (type=2) а другой радио (type=1) ничего не значит, т.к. есть ответы с type=2 (чекбоксы).

Спустя 1 час, 12 минут, 13 секунд (11.10.2009 - 11:41) Oyeme написал(а):
В Oracle есть такая функция как Connected by prior

Одной функций ты облазишь всё дерево rolleyes.gif

А если у тебя не оракле,то в mysql со средством php

Тебе всего лишь стоить написать рекурсию само на себя.

Недавно писал похожoе smile.gif

Adva - таблица составлена правильно,остаётся писать рекурсивную функцию.

Заносишь всё в массив,потом берешь первый ид ,проверяешь если у него парен_ид ,если есть - запускаешь рекурсию ,она опять ищет.Токо результаты храни в массивах,потом их обнуляй.

Спустя 1 час, 25 минут, 55 секунд (11.10.2009 - 13:07) Adva написал(а):
функция уже написана и все работает )) просто мне захотелось чтобы второй уровень ответов отображался другим цветом.

вот функция которая формирует вывод

PHP
foreach($menu as $value) {
     
            if 
($value['quest_type']==0) $type = $value['quest_text'];
            else $type = $value['quest_text']."<div style='width:400px; height:4px; margin-bottom:5px; border-top:1px solid #d7d7d7;'><div style='width:".$value['procent']."%; background:#3caa3c; height:4px;'></div></div>";
      
            
// если у текущего элемента нет детей
            if(count($value['child'])==0)
                $content.="<li>{$type}</li>"; // заносим элемент списка li
            // если у текущего элемента есть дети
            else {
                $content.="<li>{$type}<ul>"; // заносим элемент списка li и открываем список детей
                printChildMenu2($content, $value['child']); // (рекурсивный вызов) обходим детей элемента для формирования списка
                $content.="</ul></li>"; // заносим конец списка детей.     
            }
}


а вот что она выводит
Цитата
<li>
    <b>Бывали ли Вы на мероприятиях музея?</b>
    <ul>
        <li>Да
            <ul>
                <li>Рождество в музее</li>
                <li>Сударыня-масленица </li>
                <li>Остров детства </li>
                <li>День Военно-Морского флота </li>
            </ul>
        </li>
        <li>Нет</li>
    </ul>
</li>

Спустя 34 минуты, 25 секунд (11.10.2009 - 13:42) HardWoman написал(а):
Цитата
просто мне захотелось чтобы второй уровень ответов отображался другим цветом.


Ну так и добавь еще столбец уровень. И введи в запрос.

Спустя 3 часа, 34 минуты, 40 секунд (11.10.2009 - 17:16) Adva написал(а):
Цитата
Ну так и добавь еще столбец уровень. И введи в запрос.

в таком случае эта проблема решится, но возникнет другая более сложная, каким образом прописывать уровень? если все вопросы создаются через админ-панель (ну пока еще не создаются, но будут)

можно сделать просто "каким цветом отображать полоску в результатах".
- Зеленым
- Синим

но как то слишком много настроек для простого создания анкеты
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.