Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как хранить 32 поля [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
caballero
Отправлено: 26 Апреля, 2016 - 15:42:26
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну так можно и в XML записать тогда можно искать по тегам


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
pantela
Отправлено: 26 Апреля, 2016 - 21:25:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




caballero пишет:
serialize()
не сталкивался... просто приведите пример как хранить в БД, как сохранять и выводить...
спс.Ув.

(Отредактировано автором: 15 Марта, 2018 - 16:55:29)

 
 Top
IllusionMH
Отправлено: 26 Апреля, 2016 - 22:57:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




pantela, как это обычно делается через еще 1 таблицу соотношением многие-к-многим
 
 Top
kuller
Отправлено: 26 Апреля, 2016 - 23:16:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




??? Непонял! интересные ответы.... тоже задался таким же вопросом.... чем же так плохо создать 32 поля? многих в cms как dle, joomla, wordpress используют более 32х полей в одной таблице...

з.ы. после прочтения темы сложилось вообще такое мнение что советуют не когда не создавать много полей Радость делаем 2 поля id (AUTO_INCREMENT) и text
в поле text сохраняем строку, а при выборке делаем массив из text )))

(Отредактировано автором: 26 Апреля, 2016 - 23:23:56)

 
 Top
pantela
Отправлено: 27 Апреля, 2016 - 02:33:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Ну если подвести итог сделал так... Имею 32 checkbox поля
В таблице в поле text сохраняю
CODE (SQL):
скопировать код в буфер обмена
  1. {
  2. "comfort_1":"1",
  3. "comfort_2":"1",
  4. "comfort_3":"0",
  5. "comfort_4":"1",
  6. "comfort_5":"0",
  7. "comfort_6":"0",
  8. "comfort_7":"1",
  9. "comfort_8":"1",
  10. "comfort_9":"0",
  11. "comfort_10":"1",
  12. "comfort_11":"0",
  13. "comfort_12":"0",
  14. "comfort_13":"1",
  15. "comfort_14":"1",
  16. "comfort_15":"0",
  17. "comfort_16":"1",
  18. "comfort_17":"0",
  19. "comfort_18":"0",
  20. "comfort_19":"1",
  21. "comfort_20":"1",
  22. "comfort_21":"0",
  23. "comfort_22":"1",
  24. "comfort_23":"0",
  25. "comfort_24":"0",
  26. "comfort_25":"1",
  27. "comfort_26":"1",
  28. "comfort_27":"0",
  29. "comfort_28":"1",
  30. "comfort_29":"0",
  31. "comfort_30":"0",
  32. "comfort_31":"1",
  33. "comfort_32":"0"
  34. }


Вывожу так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if($data['comfort_data']){
  3.   $count_comfort_data = count($data['comfort_data']);
  4.  
  5.   foreach ($data['comfort_data'] as $key => $value) {
  6.     $checked = ($value == '1')?' checked="checked"':'';
  7.     echo '<div class="checkbox custom-checkbox"><label><input name="'.$key.'" type="checkbox" '.$checked.'><span class="fa fa-check"></span> '.$key.'</lable></div>';
  8.   }
  9. }
  10. ?>


Теперь осталось на сохранение послать... Сейчас POST выводи так
PHP:
скопировать код в буфер обмена
  1. [comfort_1] => on
  2.     [comfort_2] => on
  3.     [comfort_4] => on
  4.     [comfort_7] => on
  5.     [comfort_8] => on
  6.     [comfort_10] => on
  7.     [comfort_13] => on
  8.     [comfort_14] => on
  9.     [comfort_16] => on
  10.     [comfort_19] => on
  11.     [comfort_20] => on
  12.     [comfort_22] => on
  13.     [comfort_25] => on
  14.     [comfort_26] => on
  15.     [comfort_28] => on
  16.     [comfort_31] => on


1. Думаю как теперь все поля в один массив собрать, чтобы сохранялся бы также т.к. сейчас они у меня виде одного поля - наверное, через forech надо все поля пропустить (количество знаю $count_comfort_data) и так собрать...

2. Те поля которые не выделены вообще не попадают в POST... - наверное, (isset($data['pool']))?'1':'0' надо будет предварительно сделать

Очень прошу строго не судите, первый раз такое делаю, вот и опыта набираю... лучше подправьте если что не так Закатив глазки ))
 
 Top
Pinkya_rabbit
Отправлено: 27 Апреля, 2016 - 03:58:28
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Апр. 2016  
Откуда: Minsk перебираюсь в Питер


Помог: 1 раз(а)




я конечно ещё далёк до мастерского программиста, но когда только учился работать с базами данных была там хорошая фраза "создавайте сущности, но не плодите сущности". Нет смысла записывать пол, мобильный телефон и адрес работника в разные поля, если они всё равно не изменяются и принадлежат конкретному работнику. Точно то же самое про имя фамилию отчество и дату рождения. Отдельно стоит лишь отделять изменяемые параметры. ну я так глазами по теме пробежал, как понял вопрос именно в этом.
 
My status
 Top
kuller
Отправлено: 27 Апреля, 2016 - 04:35:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




pantela пишет:
В таблице в поле text сохраняю
{
"comfort_1":"1",
"comfort_2":"1",
"comfort_3":"0",
"comfort_4":"1",
"comfort_5":"0",
"comfort_6":"0",
"comfort_7":"1",
"comfort_8":"1",
"comfort_9":"0",
"comfort_10":"1",
"comfort_11":"0",
"comfort_12":"0",
"comfort_13":"1",
"comfort_14":"1",
"comfort_15":"0",
"comfort_16":"1",
"comfort_17":"0",
"comfort_18":"0",
"comfort_19":"1",
"comfort_20":"1",
"comfort_21":"0",
"comfort_22":"1",
"comfort_23":"0",
"comfort_24":"0",
"comfort_25":"1",
"comfort_26":"1",
"comfort_27":"0",
"comfort_28":"1",
"comfort_29":"0",
"comfort_30":"0",
"comfort_31":"1",
"comfort_32":"0"
}


тогда уже проще вообще это в файле хранить Улыбка и таскать от туда дынные. Меньше нагрузки на сервер MySQL.
 
 Top
Мелкий Супермодератор
Отправлено: 27 Апреля, 2016 - 09:25:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Видимо, раз уж тема доросла до второй странице, пора и мне поучаствовать.

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

pantela пишет:
JSON массив в таблицу поля (тип text)

Даже mysql уже умеет json нативно. https://dev[dot]mysql[dot]com/doc/refman[dot][dot][dot]5[dot]7/en/json[dot]html
Ну, как это водится у mysql, индексы к нему прикрутили через какое-то весьма странное место. Но прикрутили.

Про упаковку в int вспомнили, а про тип set - почему-то нет. А зря, та же самая битовая маска 64-битная, нативно именованная и с вполне рабочим поиском по индексам.

kuller пишет:
делаем 2 поля id (AUTO_INCREMENT) и text
в поле text сохраняем строку, а при выборке делаем массив из text )))

К слову, такие потуги вполне встречаются, особенно у кровавого Java. Писать в базу XML и всё. Любимая "не совсем шутка" ДБА при объяснении, зачем нужно продумывать схему базы.

pantela пишет:
Думаю как теперь все поля в один массив собрать

Пересоберите форму в
CODE (html):
скопировать код в буфер обмена
  1. <input type="checkbox" name="comfort[key]">
  2. <input type="checkbox" name="comfort[anotherkey]">

Получите на PHP сразу массив.

Да, isset, разумеется, делать надо будет.


-----
PostgreSQL DBA
 
 Top
pantela
Отправлено: 27 Апреля, 2016 - 09:27:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




kuller пишет:
kuller


Да но когда будет 1000 записей, мне 1000 файлов ведь не держать... всё-же на файлах ничего особо не хотелось бы...

Кто что ещё помечил бы...
спс.Ув.

Мелкий пишет:
Мелкий

ок, спс, сейчас поковиряю...

(Отредактировано автором: 27 Апреля, 2016 - 09:30:14)

 
 Top
Viper
Отправлено: 27 Апреля, 2016 - 10:48:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




pantela пишет:
мне 1000 файлов ведь не держать
зачем? В JSON и XML можно сколь угодно вложенностей хранить.
Pinkya_rabbit пишет:
я конечно ещё далёк до мастерского программиста, но когда только учился работать с базами данных была там хорошая фраза "создавайте сущности, но не плодите сущности". Нет смысла записывать пол, мобильный телефон и адрес работника в разные поля, если они всё равно не изменяются и принадлежат конкретному работнику. Точно то же самое про имя фамилию отчество и дату рождения. Отдельно стоит лишь отделять изменяемые параметры. ну я так глазами по теме пробежал, как понял вопрос именно в этом.
как раз таки могу вас уверить что телефоны и адреса очень даже часто изменяемы. Вот как раз таки ФИО это одна сущность, телефон - вторая, адрес - третья. А ещё один телефон может принадлежать не одному человеку, а по одному адресу могут проживать целая семья.
В общем Мелкий прав.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
pantela
Отправлено: 29 Апреля, 2016 - 21:07:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Пробую переписать всё функцию.

(Отредактировано автором: 15 Марта, 2018 - 17:09:13)

 
 Top
pantela
Отправлено: 03 Мая, 2016 - 14:51:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Может merge сделать массивам и через один foreach их выводить и внутри проверять вывод Растерялся
 
 Top
pantela
Отправлено: 31 Мая, 2016 - 13:28:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Растерялся
 
 Top
esterio
Отправлено: 02 Июня, 2016 - 17:49:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Проще всего сохранять все ключи массива. Вам же в POST прилетают помеченые. Для этого опдойдет либо merge
(Добавление)
А если и правда 32 поля и не планируеться больше то лично я бы использовал биты
 
 Top
pantela
Отправлено: 08 Июня, 2016 - 18:01:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




В итоге решил сделать как вы советуете через 3 поля.
- Объекты
- Параметров
- Связка

Теперь встал вопрос... У меня для одного объекта будет большая часть параметров, что бы сократить количество записей в таблице связок, может наоборот мне при выводе делать запрос виде тех параметров которые не найдены в связке... Растерялся
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB