|
|
|
| Привет всем!
Народ подскажите пожалуйста, как тактичней решить задачу:
-есть мультиселект
-значения мультиселекта я записываю построчно в поле db выбранные значения.
например в селекте:
$data = array(
'1' => 'Satu',
'2' => 'Dua',
'3' => 'Tiga',
'4' => 'Ober',
);
* был выбран пункт 1 и 2
В следующий раз, желая отредактировать я захожу на страницу редактирования,
в отобразившемся селекте стоят ранее выбранные данные (позиция: 1 и 2).
Так вот, изменяя выбранные позиции в списке я отправляю новые данные в обработчик:
в правильном варианте: я бы зная id строки заменил бы старое значение на новое.
Но, как работать в данном варианте?
ведь могут
- удалить одну позицию
- добавить еще парочку..
..а если список огромный???
- и.т.д
писать страшную логику?
Напрашивается, удалять старые строки из db - и записывать заново, новые.
Но ведь это маразм!!!
как быть?
Спасибо! | |
|
|
|
|
|
|
|
для: Denandi
(12.12.2013 в 17:07)
| | Мульти список это массив, исходное состояние этого массива можно запомнить, а потом вычесть из него измененные состояния - массива полученного вновь, вот массивы разницы и обновляйте в базе. | |
|
|
|
|
|
|
|
для: confirm
(12.12.2013 в 19:15)
| | ..исходное состояние этого массива можно запомнить...
что значит запомнить?
я пробовал сделать штатными средствами ф. array_diff - хрень какая то получается.
если количество пунктов - уменьшается, то показ. пустой массив.
если увеличивается - тогда показывает разницу
но! если удалить и при то еще увеличить - то показывает разницу без удаленных! а те будут дальше висеть! | |
|
|
|
|
|
|
|
для: Denandi
(13.12.2013 в 00:10)
| | А что значит запомнить мультиселект в вашем случае?
Если это его значения (id чего-то), то значит надо запоминать вновь прибывшие значения, ведь только то, что установлено, будет является выбором, а что не выбрано, то не выбрано.
Случай второй - это есть некое состояние, которые определены для этих id, и при выборе других id этим списком, нужно перевести состояние не выбранных в противоположное (сбросить). В этом случае да, надо знать что изменилось относительно первого набора. Хотя можно в базе сначала сбросить состояния всех id, а потом установить для вновь выбранных.
А вам что надо? | |
|
|
|
|
|
|
|
для: confirm
(13.12.2013 в 01:28)
| | >А что значит запомнить мультиселект в вашем случае?
Вопрос на вопрос, сильный ход :))
пробовал по разному, все крайне шаткое, какие то сопли получаются. проблема в том что данный массив может изменяться как в минус так и в плюс, абсолютно хаотично. поэтому опираться на id - затруднительно.
*** может проще, проверить, если изменения были - удалять из базы старое. И записывать новое.
- id разрастется таким образом до НЕприличных размеров.
насколько такой вариант критичен?
поясню,
это для каталога в ~ 6 000-10 000 з.
точнее таблица связей, куда записываются результаты атрибутов. таблица будет жирной.
Следовательно при редактировании товара будет происходить и обновление свойств.
Спасибо | |
|
|
|
|
|
|
|
для: Denandi
(13.12.2013 в 03:01)
| | Я вас просил не о "жирности" рассказать и сколько у вас там записей, а о том, что вам надо, ибо действуете вы не так, как надо было бы, вот только понять чего конкретно вы хотите...
Исходный массив, это не то что выбрано, а массив описывающий все вхождения в него, поэтому:
>если количество пунктов - уменьшается, то показ. пустой массив.
>если увеличивается - тогда показывает разницу
просто быть не может, если понимать что на самом деле надо делать. | |
|
|
|