|
|
|
| Вот встала проблема хранить в базе набор чекбоксов.
Например:
В свободное время я:
[1] пойду гулять
[2] буду смотреть телек
[3] уткнусь в комп
[4] буду пить водку
[5] Свой вариант ______________
|
Без пункта свой вариант всё красиво и понятно. Набор хранится в одном поле в виде двоичного числа 0010 (чекбокс отмечен - 1, не отмечен - 0), который, имея справочник (ключ - значени) легко восстановить.
Всю малину портит 5 пункт, свободный выбор. Вопрос - как быть с этим своим вариантом (а это, понятно строка любой длины)? Как и куда его сохранять и как потом восстанавливать.
Свой вариант, конечно есть, но он дурацкий (иначе бы не писал уж :)) | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 16:15)
| | > Набор хранится в одном поле в виде двоичного числа 0010 (чекбокс отмечен - 1, не отмечен - 0)
Странно, а данные (идентификатор, описание) чекбоксов хранятся не в отдельной таблице что ли? | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 16:23)
| | Это, в принципе, не важно.
Так как это справочники, а не пользовательские данные, то хранить их в базе смысла нет никакого.
Я их храню в виде файлов на диске.
Формат: key:value | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 16:45)
| | Хозяин — барин.
> Формат: key:value
Тогда просто измените формат на "key:is_custom:value", где is_custom принимает значения 0 или 1, обозначающие соотвественно вывод обычного текста или в <input type="text" ... />.
P.S. Под value я понял описания "пойду гулять", "буду смотреть телек" и т.д., а не значение одноименного атрибута <option>. | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 17:03)
| | а само значение пользовательского ввода где сохранять?
PS Я вместо is_custom зарезервировал ключ 9. Под которым всегда будет пользовательское поле.
Т.е. справочник выглядит как
1:пойду гулять
2:буду смотреть телек
3:уткнусь в комп
4:буду пить водку
9:Свой вариант
|
Так что можно обойтись структурой key:value
Вообще интересны любой опыт решения данной проблемы, если кто-то решал нечто подобное.
Проблема довольно теоретична :) | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:18)
| | > а само значение пользовательского ввода где сохранять?
В value. | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 17:21)
| | Не получится. Так как справочник - один, а пользователей может быть мильон. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:23)
| | Простите, ничего не понял. Что это за справочник с какими-то вопросами для пользователей? В справочниках обычно ответы:) | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 17:26)
| | OK. Разберёмся в понятиях :)
Справочник, в данном контексте, это файл (или таблица, неважно) вида ключ - значение.
Юзер, выбирая определённые чекбоксы формирует двоичное число, хранящее состояние этих чекбоксов, отсортированных по ключам.
Справочник
1:пойду гулять
2:буду смотреть телек
3:уткнусь в комп
4:буду пить водку
9:Свой вариант
|
Формирует набор чекбоксов
[1] пойду гулять
[2] буду смотреть телек
[3] уткнусь в комп
[4] буду пить водку
[5] Свой вариант ______________
|
выбор юзером 1 3 5 чекбокса формирует число 10101 которое и сохраняется в поле free_day соответствующей таблице.
user_id name email free_day
115 kolya df@df.rt 10101
|
Восстановить текстовые значения из числа 10101 имея справочник труда нет.
Вся проблема сводится к тому куда записывать значение пользовательского ввода. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:37)
| | В данном случае можно проверять если отмечен пятый чебокс, то значение поля ввода юзером записывается в отдельный столбец таблицы
user_id name email free_day field5
115 kolya df@df.rt 10101 Пить пиво
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(17.06.2008 в 17:41)
| | > Можно проверять если отмечен пятый чебокс, то значение поля ввода юзером записывается в отдельный столбец таблицы
Какое отношение имеет ответ на один из вопросов к данным пользователя?
UPD: Хотя нет, AcidTrash, тут уже не Вы виноваты...Оказывается такая структура у Axxil... | |
|
|
|
|
|
|
|
для: AcidTrash
(17.06.2008 в 17:41)
| | Можно.
А если таких наборов чекбоксов штук 15 -20? :)
Столько же полей создавать? | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:50)
| | > А если таких наборов чекбоксов штук 15 -20? :)
А если вопроса будет два? Вы добавите другое поле в таблицу users, да?:) | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 17:52)
| | нет конечно :)
просто 15-20 нагляднее показывают невозможность способа | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:50)
| | Об этом не подумал. Самый оптимальный вариант предложил BinLaden. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:37)
| | А такой вопрос можно? Если чекбоксы, то я могу выбрать и [1] пойду гулять, и [2] буду смотреть телек - а можно ли это делать сразу? | |
|
|
|
|
|
|
|
для: sim5
(17.06.2008 в 17:42)
| | Сейчас есть мобильное телевидение :)
А если серьёзно, варианты от балды написаны. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:51)
| | Ну если у вас допустимо пить водку, смотря телевизор, уткнувшись в компьютер - вопросов нет. | |
|
|
|
|
|
|
|
для: sim5
(17.06.2008 в 17:53)
| | Ещё раз:
> А если серьёзно, варианты от балды написаны. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:37)
| | to Axxil: должен быть какой-то идентификатор вопроса. Тогда можно записать ответ в таблицу вида question_id, user_id, value. | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 17:43)
| | Наглядный пример:
http://love.mail.ru/ksave2/?sold=J7tKx_OXX.dLpIikItvs6GjPOQQfx8xf
Посмотрите сколько там может быть полей с наборами чекбоксов.
Идентификатор вопроса - название поля. | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:54)
| | Так BinLaden и привел пример | |
|
|
|
|
|
|
|
для: AcidTrash
(17.06.2008 в 17:57)
| | Да я так и сделал :)
Мне этот вариант не нравится. Как-то неэлегантно.
Поэтому и интересуюсь другими идеями :) | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:54)
| | Мне из этого майловского опросника всегда интересовало - Волосы на голове: Темные - это для того чтобы не подумали плохого, или для размышления?)) | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 17:54)
| | to Axxil: давай-те разберемся.
Вы хотите, чтобы поле с отмеченными чекбоксами хранились для конкретной темы (вопроса) в поле users, но при этом Вам не понравилось хранить значение своего варианта в той же таблице. Почему?
Или Вы хотите сделать несколько своих вариантов ответов? Тогда почему Вы зафиксировали для ответа только "9"? | |
|
|
|
|
|
|
|
для: BinLaden
(17.06.2008 в 18:01)
| | Насчёт "несколько вариантов" я пока не прорабатывал.
Насчёт таблицы - я так и сделал по-началу. А потом прикинул её потенциальный объём. И подумал что может есть ещё варианты и мой моск просто зашаблонился окончательно.
Похоже что нет :) | |
|
|
|
|
|
|
|
для: Axxil
(17.06.2008 в 18:04)
| | >Насчёт таблицы - я так и сделал по-началу
Начнем еще раз по порядку.
Таблица здесь нужна не одна, а две(вопросы, ответы), с учетом того, что таблица юзеров у вас есть. Насчет структуры таблиц и взаимосвязей трех таблиц(включая вашу с юзерами) покумекайте. Если не получится, то предложу варианты. | |
|
|
|
|
|
|
|
для: AcidTrash
(17.06.2008 в 22:31)
| | > Насчет структуры таблиц и взаимосвязей трех таблиц(включая вашу с юзерами) покумекайте.
Мудро :)
В этом собственно вопрос и заключался.
Всё, всем спасибо. Вопрос решён.
PS Две таблицы тут не нужны. Так как я сторонник хранения в базе исключительно пользовательских данных, т.е. контента. Вся остальная сопутствующая фигня (справочники, конфиги и пр.) хранится в файлах. | |
|
|
|