![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| zhpasha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Опишу в начале задачу, которая стоит передо мной.
Имеется страница редактирования, допустим редактирования новостей. На странице N штук новостей. Все эти N новостей находятся в одной форме, соответственно при редактирование, отправка ВСЕХ данных этой формы производится одной кнопкой. В итоге, одновременному редактированию могут подвергнуться сразу несколько новостей. Картина, я надеюсь, ясна. Теперь у меня возникает следующая проблема. Таблица новостей: id | title | text | visible | Мне необходимо (в идеале одним запросом) выполнить UPDATE сразу нескольких строк этой таблицы. Причём поля в них меняться могут разные и значения принимать разные. P.C. Пока вижу только два способа. Оба из них отпадают: 1. Составить по полученным из формы данным m запросов.. Но насколько я понимаю, одним шагом их по средствам php не выполнить?! 2. Отпадает не успев появиться - пустить запрос в цикле. Возможно ли как-то "изящно" решить этот вопрос? |
|||
|
||||
| lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 3 Всего: 14 |
хм.. а зачем редактировать сразу 5 новостей...
можно сделать список новостей с кнопочкой редактировать напротив каждой, и выводить форму редактирования только для одной новости.. |
|||
|
||||
| zhpasha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Безусловно можно. Передо мной пока стоит задача, описанная выше. Не хочется обсуждать вопросы юзабилити. Если задача технически грамотно никак не реализуется, то придется делать именно так, что очень не хочелось бы( |
|||
|
||||
| lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 3 Всего: 14 |
а чем тебе не нравиться несколько update запросов, зачем тебе делать их именно одним запросом?
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
первоначальный подход чреват граблями. к примеру, как ты определишь - какие из 5(10,25,100 - нужное подчеркнуть) текстов изменились, а какие не надо записывать в БД? на javascript'e напишешь обработчик нажатий? будешь сравнивать с текущей версией в базе? а как быть, если две новости отредактировали, а потом - передумали и захотели отменить редактирование в одной новости и сохранить изменение в другой? будешь добавлять галочку "это не сохранять"? или будешь полагаться на реализацию CTRL + Z в WYSIWYG-редакторе? не лучше ли все же позволить человеку редактировать новости по одной? |
|||
|
||||
| zhpasha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
В принципе оно мне НЕ не нравится. Каким образом их сделать несколько? Пустить цикл?!- не хотелось бы, мягко говоря. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
через mysqli->multi_query, к примеру, можно выполнить несколько запросов за одно обращение к БД. средствами "чистого" SQL запрос типа "обнови поле в такое-то значение для записи с id= 25 и в такое-то значение для записи с id=38" не составить, нет. Добавлено через 41 секунду но вообще, это как безногому давать костыли - стоять ещё сможет, а вот ходить - нет. |
|||
|
||||
| zhpasha |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
Согласен со всем вышесказанным тобой. Вопрос стоит в "хотелке" заказчика. Я то прекрасно понимаю, как оно будет рациональнее.
Не совсем точно написал я. *То придется делать так, и пытаться объяснить, что ТАК оно удобнее, рациональнее и тд и тп.
Вот в это основной вопрос был, спасибо. Ладно. Если оно так, то буду заниматься объяснениями |
||||||
|
|||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
уличная 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 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 17.10.2006 Репутация: нет Всего: нет |
а еще лучше залезть в phpmyadmin и посмотреть как они там делают update нескольких записей (когда выбираешь несколько записей и нажимаешь редактировать)
хотя я сомневаюсь что там будет сделано самым легким путем .. но тем не менее работает превосходно |
|||
|
||||
| zhpasha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 29.2.2008 Репутация: нет Всего: нет |
2 Lexxx_HU
phpmyadmin делает несколько апдейтов, через ; . Потому и работает превосходно;) |
|||
|
||||
| Nigel |
|
||||||||||
|
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
Да ладно, можно это сделать, достаточно правильно массив в запросе передать, затем его разобрать
Не помню как в "чистом SQL" , лень щас смотреть, а в MySQL можно сделать
Зацени для сравнения такой=)
skyboy, ай-яй-яй, обманули человека, он пошел оправдываться перед начальством)) |
||||||||||
|
|||||||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Nigel, Ну да, наверное case к этой задачке лучше подойдет.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Puls |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.11.2008 Репутация: нет Всего: нет |
У меня задачка почти такая же. Почти
Дано - два связанных массива. Одной размерности. A и B. И в таблице есть два поля - X и Y. Требуется - увеличить Y на B[i] при условии, что X=A[i]. Для всех элементов массива. Естественно, в цикле всё легко и просто - UPDATE таблица SET y=y+b[i] WHERE x=a[i]. А как победить одним запросом? |
|||
|
||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |