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
Форумы портала PHP.SU :: Версия для печати :: цикл FOR и MySQL UPDATE
Форумы портала PHP.SU » » Если скрипт не работает » цикл FOR и MySQL UPDATE

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

1. Saymor - 14 Мая, 2011 - 14:29:06 - перейти к сообщению
Помогите советом, не могу понять почему 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
в чем проблема?
2. grefon - 14 Мая, 2011 - 14:48:57 - перейти к сообщению
Радость Всмотритесь в свой запрос! Он делает то, что Вы ему говорите, цикл тут не причем.

У Вас есть поле со значением 4, в 4 интерации Вы ему присваиваете значение 5, в 5 - 6, в 6 - 7 и так далее. Короче Вы все поля поднимаете до 100.
3. Saymor - 14 Мая, 2011 - 14:55:27 - перейти к сообщению
grefon пишет:
Радость Всмотритесь в свой запрос! Он делает то, что Вы ему говорите, цикл тут не причем.

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


спасибо, это я понимаю, но как это обойти?
4. grefon - 14 Мая, 2011 - 14:58:39 - перейти к сообщению
Вам нужно во всей таблице поднять ordering на +1?
(Добавление)
В общем или пускайте цикл в обратную сторону, или переделайте запрос, что лучше! Улыбка
5. Saymor - 14 Мая, 2011 - 15:06:21 - перейти к сообщению
grefon пишет:
Вам нужно во всей таблице поднять ordering на +1?
(Добавление)
В общем или пускайте цикл в обратную сторону, или переделайте запрос, что лучше! Улыбка


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

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

чего-то я недоумеваю..
6. grefon - 14 Мая, 2011 - 15:15:49 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $database->setQuery("UPDATE table1 SET ordering=ordering+1 WHERE city=1 AND category=2");
  2. $database->query();


Вот так и без всяких циклов! Соль в том, что так Ахилес не догонит черепаху Улыбка
7. Saymor - 14 Мая, 2011 - 15:27:34 - перейти к сообщению
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"
8. grefon - 14 Мая, 2011 - 15:32:46 - перейти к сообщению
Saymor пишет:
Вы не совсем правильно меня поняли.

Теперь я совсем ничего не понял. Вы попробуйте код который я написал, может вопрос решится сам собой.
9. OrmaJever - 14 Мая, 2011 - 15:33:33 - перейти к сообщению
а вы пробовали запрос? Этот запрос имено это и должен делать
10. Saymor - 14 Мая, 2011 - 15:41:00 - перейти к сообщению
grefon пишет:
Теперь я совсем ничего не понял. Вы попробуйте код который я написал, может вопрос решится сам собой.


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


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

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

взглянул прям с другого ракурса Однако Низкий Вам поклон!
11. grefon - 14 Мая, 2011 - 15:44:12 - перейти к сообщению
С помощью правильных запросов можно сделать 90% всей работы. Просто нужно научится понимать что-к-чему. А использование циклов при работе с базой в большинстве случае неверное решение и дополнительная нагрузка на сервер.
12. Saymor - 14 Мая, 2011 - 15:52:27 - перейти к сообщению
grefon пишет:
С помощью правильных запросов можно сделать 90% всей работы. Просто нужно научится понимать что-к-чему. А использование циклов при работе с базой в большинстве случае неверное решение и дополнительная нагрузка на сервер.


Я написал Вам личное сообщение, ответьте пожалуйста.. Хорошо
13. Stierus - 16 Мая, 2011 - 09:27:08 - перейти к сообщению
Еще один живой пример, иллюстрирующий, что нужно описывать первоначальную задачу, а не ваш способ ее реализации Улыбка.

Запросов в цикле не должно быть вообще, я не могу вспомнить ни одного случая, когда запросы в цикле были бы хоть чем-то лучше нормальных запросов без цикла (пусть не 1, а несколько - не важно, но без цикла). Если человек предлагает вам поставить запрос внутрь цикла - значит что он некомпетентен в этой области и его слушать не стоит.

 

Powered by ExBB FM 1.0 RC1