| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > UPDATE нескольких строк |
| Автор: zhpasha 6.11.2008, 16:29 |
| Опишу в начале задачу, которая стоит передо мной. Имеется страница редактирования, допустим редактирования новостей. На странице N штук новостей. Все эти N новостей находятся в одной форме, соответственно при редактирование, отправка ВСЕХ данных этой формы производится одной кнопкой. В итоге, одновременному редактированию могут подвергнуться сразу несколько новостей. Картина, я надеюсь, ясна. Теперь у меня возникает следующая проблема. Таблица новостей: id | title | text | visible | Мне необходимо (в идеале одним запросом) выполнить UPDATE сразу нескольких строк этой таблицы. Причём поля в них меняться могут разные и значения принимать разные. P.C. Пока вижу только два способа. Оба из них отпадают: 1. Составить по полученным из формы данным m запросов.. Но насколько я понимаю, одним шагом их по средствам php не выполнить?! 2. Отпадает не успев появиться - пустить запрос в цикле. Возможно ли как-то "изящно" решить этот вопрос? |
| Автор: lelik133 6.11.2008, 17:10 |
| хм.. а зачем редактировать сразу 5 новостей... можно сделать список новостей с кнопочкой редактировать напротив каждой, и выводить форму редактирования только для одной новости.. |
| Автор: zhpasha 6.11.2008, 17:24 | ||
Безусловно можно. Передо мной пока стоит задача, описанная выше. Не хочется обсуждать вопросы юзабилити. Если задача технически грамотно никак не реализуется, то придется делать именно так, что очень не хочелось бы( |
| Автор: lelik133 6.11.2008, 17:37 |
| а чем тебе не нравиться несколько update запросов, зачем тебе делать их именно одним запросом? |
| Автор: skyboy 6.11.2008, 17:44 |
первоначальный подход чреват граблями. к примеру, как ты определишь - какие из 5(10,25,100 - нужное подчеркнуть) текстов изменились, а какие не надо записывать в БД? на javascript'e напишешь обработчик нажатий? будешь сравнивать с текущей версией в базе? а как быть, если две новости отредактировали, а потом - передумали и захотели отменить редактирование в одной новости и сохранить изменение в другой? будешь добавлять галочку "это не сохранять"? или будешь полагаться на реализацию CTRL + Z в WYSIWYG-редакторе? не лучше ли все же позволить человеку редактировать новости по одной? |
| Автор: zhpasha 6.11.2008, 17:47 | ||
В принципе оно мне НЕ не нравится. Каким образом их сделать несколько? Пустить цикл?!- не хотелось бы, мягко говоря. |
| Автор: skyboy 6.11.2008, 17:47 |
через http://ua.php.net/manual/en/mysqli.multi-query.php, к примеру, можно выполнить несколько запросов за одно обращение к БД. средствами "чистого" SQL запрос типа "обнови поле в такое-то значение для записи с id= 25 и в такое-то значение для записи с id=38" не составить, нет. Добавлено через 41 секунду но вообще, это как безногому давать костыли - стоять ещё сможет, а вот ходить - нет. |
| Автор: zhpasha 6.11.2008, 18:02 | ||||||
Согласен со всем вышесказанным тобой. Вопрос стоит в "хотелке" заказчика. Я то прекрасно понимаю, как оно будет рациональнее.
Не совсем точно написал я. *То придется делать так, и пытаться объяснить, что ТАК оно удобнее, рациональнее и тд и тп.
Вот в это основной вопрос был, спасибо. Ладно. Если оно так, то буду заниматься объяснениями |
| Автор: ksnk 6.11.2008, 20:10 | ||
| уличная Mysql магия... прилетели данные array( array('id'=1,'title'='Hello!1'), array('id'=2,'title'='Hello!2', 'visible'=0), array('id'=3,'text'='text3'), ) строим sql
Один запрос... А ручки-то они вот ! Добавлено через 54 секунды Как построить запрос - это секрет ! Впрочем, правильное решение уже звучало .... |
| Автор: Lexxx_HU 17.11.2008, 20:54 |
| а еще лучше залезть в phpmyadmin и посмотреть как они там делают update нескольких записей (когда выбираешь несколько записей и нажимаешь редактировать) хотя я сомневаюсь что там будет сделано самым легким путем .. но тем не менее работает превосходно |
| Автор: zhpasha 18.11.2008, 00:10 |
| 2 Lexxx_HU phpmyadmin делает несколько апдейтов, через ; . Потому и работает превосходно;) |
| Автор: ksnk 20.11.2008, 18:37 | ||
Nigel, Ну да, наверное case к этой задачке лучше подойдет.
|
| Автор: Puls 24.11.2008, 18:20 |
| У меня задачка почти такая же. Почти Дано - два связанных массива. Одной размерности. A и B. И в таблице есть два поля - X и Y. Требуется - увеличить Y на B[i] при условии, что X=A[i]. Для всех элементов массива. Естественно, в цикле всё легко и просто - UPDATE таблица SET y=y+b[i] WHERE x=a[i]. А как победить одним запросом? |