Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как хранить информацию в базе об отмеченных чекбоксах
 
 автор: fekss   (17.02.2009 в 13:57)   письмо автору
 
 

Подскажите как хранить информацию в БД об отмеченных элементах, когда есть форма 1-n чекбоксов.

я вижу вариант, что из формы передается post массив, например

$_POST['elt'][1]
$_POST['elt'][6]
$_POST['elt'][8]

из него делается строка |1|6|8| и в таком виде заносится в БД(в поле типа varchar), + в том что если нам надо найти элт у которого отмечен чекбокс 8 то просто сделаем WHERE LIKE %|8|%

но может быть есть более рациональный вариант?

2й вопрос

есть расписание работы магазина
ПН 9:00 - 20:00
ВТ 11:00 - 22:00
СР 14:00 - 00:00
ЧТ - круглосуточно

и т.д.

как хранить в БД подобную информацию? мб в сериализ массив?

  Ответить  
 
 автор: а-я   (17.02.2009 в 14:19)   письмо автору
 
   для: fekss   (17.02.2009 в 13:57)
 

может Вас это заинтересует:

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


Например, столбец, определенный как SET("один", "два") NOT NULL 
может принимать такие значения: 

""
"один"
"два"
"один,два"

Множество SET может иметь максимум 64 различных элемента. 

Начиная с 3.23.51, оконечные пробелы удаляются из значений множества SET 
в момент создания таблицы. 

MySQL сохраняет значения SET в численном виде, 
где младший бит сохраненной величины соответствует первому элементу множества. 
Если вы делаете выборку столбца SET в числовом контексте, 
полученное значение содержит соответствующим образом установленные биты, 
создающие значение столбца. Например, вы можете сделать выборку 
численного значения SET-столбца таким образом: 

mysql> SELECT set_col+0 FROM tbl_name;

Если делается вставка в столбец SET, биты, 
установленные в двоичном представлении числа определяют элементы множества. 
Допустим, столбец определен как SET("a","b","c","d"). 
Тогда элементы имеют такие биты установленными: 

SET элемент числовое значение двоичное значение  
a 1 0001  
b 2 0010  
c 4 0100  
d 8 1000  

Если вы вставляет значение 9 в этот столбец, 
это соответствует 1001 в двоичном представлении, так что первый ("a") 
и четвертый ("d") элементы множества выбираются, что в результате дает "a,d". 

Для значения, содержащего более чем один элемент множестве, 
не играет никакой роли, в каком порядке эти элементы перечисляются в момент вставки значения. 
Также не играет роли, как много раз то или иное значение перечислено. 
Когда позже это значение выбирается, каждый элемент будет присутствовать только единожды, 
и элементы будут перечислены в том порядке, в котором они перечисляются в определении таблицы. 
Например, если столбец определен как SET("a","b","c","d"),
 тогда "a,d", "d,a", и "d,a,a,d,d" будут представлены как "a,d". 

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

SET-значения сортируются в соответствии с числовым представлением. NULL-значения идут в первую очередь. 

Обычно, следует выполнять SELECT для SET-столбца, используя оператор LIKE или функцию FIND_IN_SET(): 

mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';
mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

Но и такая форма также работает: 

mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';
mysql> SELECT * FROM tbl_name WHERE set_col & 1;

Первый оператор в каждом примере делает выборку точного значения. 
Второй оператор делает выборку значений, содержащих первого элемента множества. 

Если вам нужно получить все возможные значения для столбца SET, 
вам следует вызвать SHOW COLUMNS FROM table_name LIKE set_column_name 
и проанализировать SET-определение во втором столбце. 

  Ответить  
 
 автор: а-я   (17.02.2009 в 14:24)   письмо автору
 
   для: fekss   (17.02.2009 в 13:57)
 

2 вопрос

я бы сделал 2 отдельных поля типа TIME "от" и "до"

если оба 0 - значит круглосуточно.

  Ответить  
 
 автор: fekss   (17.02.2009 в 14:31)   письмо автору
 
   для: а-я   (17.02.2009 в 14:24)
 

И на каждый день недели плодить запись?
не, в моем случае это не подойдет

  Ответить  
 
 автор: fekss   (17.02.2009 в 14:40)   письмо автору
 
   для: а-я   (17.02.2009 в 14:24)
 

за вариант с SET спасибо, может его как раз попробую

  Ответить  
 
 автор: Loki   (17.02.2009 в 15:44)   письмо автору
 
   для: fekss   (17.02.2009 в 14:40)
 

можно попробовать хоть FLOAT, другой вопрос что этот тип для данной задачи не подходит. а-я его определенно перепутал c ENUM. Вообще можно не заморачиваться и просто использовать TINYINT - это даже удобнее.

  Ответить  
 
 автор: а-я   (17.02.2009 в 15:48)   письмо автору
 
   для: Loki   (17.02.2009 в 15:44)
 

> а-я его определенно перепутал c ENUM.
=) все время их путаю.

  Ответить  
 
 автор: а-я   (17.02.2009 в 15:45)   письмо автору
 
   для: а-я   (17.02.2009 в 14:24)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования