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 :: цикл FOR и MySQL UPDATE

 PHP.SU

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


 Страниц (1): [1]   

> Описание: Выявление ошибки
Saymor
Отправлено: 14 Мая, 2011 - 14:29:06
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




Помогите советом, не могу понять почему UPDATE не работает в цикле

PHP:
скопировать код в буфер обмена
  1.  
  2. for($i=0; $i < 100; $i++){
  3.          $rt = $i + 1;
  4.          
  5.  $database->setQuery("UPDATE table1 SET"
  6.                         ."\n ordering='".$rt."'"
  7.                         ."\n WHERE city=1 AND category=2 AND ordering=".$i);
  8.                         $database->query();
  9. }
  10.  


обновление проходит, но все строки "ordering" принимают значение "100", а надо 1, 2, 3, ..... 100
в чем проблема?
 
 Top
grefon
Отправлено: 14 Мая, 2011 - 14:48:57
Post Id



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


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


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




Радость Всмотритесь в свой запрос! Он делает то, что Вы ему говорите, цикл тут не причем.

У Вас есть поле со значением 4, в 4 интерации Вы ему присваиваете значение 5, в 5 - 6, в 6 - 7 и так далее. Короче Вы все поля поднимаете до 100.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Saymor
Отправлено: 14 Мая, 2011 - 14:55:27
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




grefon пишет:
Радость Всмотритесь в свой запрос! Он делает то, что Вы ему говорите, цикл тут не причем.

У Вас есть поле со значением 4, в 4 интерации Вы ему присваиваете значение 5, в 5 - 6, в 6 - 7 и так далее. Короче Вы все поля поднимаете до 100.


спасибо, это я понимаю, но как это обойти?
 
 Top
grefon
Отправлено: 14 Мая, 2011 - 14:58:39
Post Id



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


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


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




Вам нужно во всей таблице поднять ordering на +1?
(Добавление)
В общем или пускайте цикл в обратную сторону, или переделайте запрос, что лучше! Улыбка


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Saymor
Отправлено: 14 Мая, 2011 - 15:06:21
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




grefon пишет:
Вам нужно во всей таблице поднять ordering на +1?
(Добавление)
В общем или пускайте цикл в обратную сторону, или переделайте запрос, что лучше! Улыбка


Вам нужно во всей таблице поднять ordering на +1? ДА.

Сударь, но в чем соль-то? чет я не совсем понимаю..
если сделать " ordering=".$i[$i]" ", то "ordering" принимают значение 1, цикл проход по скрипту 1 раз не более..

чего-то я недоумеваю..

(Отредактировано автором: 14 Мая, 2011 - 15:07:12)

 
 Top
grefon
Отправлено: 14 Мая, 2011 - 15:15:49
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $database->setQuery("UPDATE table1 SET ordering=ordering+1 WHERE city=1 AND category=2");
  2. $database->query();


Вот так и без всяких циклов! Соль в том, что так Ахилес не догонит черепаху Улыбка


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Saymor
Отправлено: 14 Мая, 2011 - 15:27:34
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




grefon пишет:
PHP:
скопировать код в буфер обмена
  1. $database->setQuery("UPDATE table1 SET ordering=ordering+1 WHERE city=1 AND category=2");
  2. $database->query();


Вот так и без всяких циклов! Соль в том, что так Ахилес не догонит черепаху Улыбка


Вы не совсем правильно меня поняли.
у меня есть например 100 объектов в БД, все они имеют поле "ordering" 1,2,3,.... 100, так вот при добавлении нового объекта мне надо чтоб все объекты поменяли своё значение "ordering" на +1, тем самым новый объект будет всегда "ordering=1"
 
 Top
grefon
Отправлено: 14 Мая, 2011 - 15:32:46
Post Id



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


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


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




Saymor пишет:
Вы не совсем правильно меня поняли.

Теперь я совсем ничего не понял. Вы попробуйте код который я написал, может вопрос решится сам собой.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
OrmaJever Модератор
Отправлено: 14 Мая, 2011 - 15:33:33
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




а вы пробовали запрос? Этот запрос имено это и должен делать


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Saymor
Отправлено: 14 Мая, 2011 - 15:41:00
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




grefon пишет:
Теперь я совсем ничего не понял. Вы попробуйте код который я написал, может вопрос решится сам собой.


OrmaJever пишет:
а вы пробовали запрос? Этот запрос имено это и должен делать


код попробовал, без всяких циклов, работает!!!!
но теперь я ничего не понимаю... Ниндзя

хотя если поразмыслить, то все логично, вопрос у меня возникает как он проходит все поля?! хотя ведь мы не указали конкретную запись! вот он и увеличил все на 1, а если бы мы указали явно в какой строке менять, то надо цикл...

взглянул прям с другого ракурса Однако Низкий Вам поклон!
 
 Top
grefon
Отправлено: 14 Мая, 2011 - 15:44:12
Post Id



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


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


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




С помощью правильных запросов можно сделать 90% всей работы. Просто нужно научится понимать что-к-чему. А использование циклов при работе с базой в большинстве случае неверное решение и дополнительная нагрузка на сервер.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Saymor
Отправлено: 14 Мая, 2011 - 15:52:27
Post Id



Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2011  


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




grefon пишет:
С помощью правильных запросов можно сделать 90% всей работы. Просто нужно научится понимать что-к-чему. А использование циклов при работе с базой в большинстве случае неверное решение и дополнительная нагрузка на сервер.


Я написал Вам личное сообщение, ответьте пожалуйста.. Хорошо
 
 Top
Stierus Супермодератор
Отправлено: 16 Мая, 2011 - 09:27:08
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Еще один живой пример, иллюстрирующий, что нужно описывать первоначальную задачу, а не ваш способ ее реализации Улыбка.

Запросов в цикле не должно быть вообще, я не могу вспомнить ни одного случая, когда запросы в цикле были бы хоть чем-то лучше нормальных запросов без цикла (пусть не 1, а несколько - не важно, но без цикла). Если человек предлагает вам поставить запрос внутрь цикла - значит что он некомпетентен в этой области и его слушать не стоит.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB