Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: UPDATE неправильно отрабатывает

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: morozmoroz   (20.09.2012 в 23:09)   письмо автору
 
   для: confirm   (20.09.2012 в 23:06)
 

Спасибо.

  Ответить  
 
 автор: confirm   (20.09.2012 в 23:06)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:56)
 

По примеру выше я не заметил, чтобы ar суммировалось к полю nakop (по результату значений не видно). Но в общем, если вы знаете, что к чему прибавить, то и проблем нет. Единственно, что вы можете не знать, так это на какую величину увеличить. Но вы ведь знаете, что эта величина для всех полей одна и та же, значит два варианта:

а) новая величина (после которой требуется коррекция) это добавление значения N к существующему. Пусть это как и в примере будет 150. Тогда нужно сразу добавлять ее всем полям этой даты:

UPDATE tab SET nakop=nakop+150 WHERE date>$enddate

б) новая величина, это значение N, которым заменили запись М, и опять как в примере, пусть будет для поля первого и равна 250. В этом случае, прежде чем ее заменить на новое значение, нужно получить старое (100), затем получить величину корректировки (250-100=150), и уже затем для всех записей как и ранее.

Как у вас все это происходит, я не знаю, но вам то все известно, значит и карты в руки.

  Ответить  
 
 автор: morozmoroz   (20.09.2012 в 22:59)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:56)
 

nakop-накопительные данные,ar- приход ежедневный.Вот и суммируем ,накапливаем эти данные.Иначе никак.

  Ответить  
 
 автор: morozmoroz   (20.09.2012 в 22:56)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:51)
 

но только nakop берется за предыдущий день,a ar берется за текущий день суммируются и записывается это значение в поле nakop текущего дня.

  Ответить  
 
 автор: confirm   (20.09.2012 в 22:55)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:51)
 

То есть, в данном примере, увеличили значение на 150. Ну и делайте запрос добавляя 150 к значению этих полей. Вот только причем тут ar, я не понял.

  Ответить  
 
 автор: morozmoroz   (20.09.2012 в 22:51)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:41)
 

я писала,но Вы не поняли.

ar nakop date
10 100 17/09/2012
20 120 18/09/2012
30 150 19/09/2012

а теперь,допустим,17/09 изменили значение nakop на 250

значит,надо поменять ВСЕ nakop

ar nakop date
10 250 17/09/2012
20 270 18/09/2012
30 300 19/09/2012

т.е. надо к откорректированному nakop прибавлять ar и записать в таблицу в поле nakop и так каждый день

  Ответить  
 
 автор: confirm   (20.09.2012 в 22:44)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:41)
 

Если nakop+ar, это и есть формула обновления значений и для всех полей одна и та же, то именно так и надо делать - одним запросом.

  Ответить  
 
 автор: morozmoroz   (20.09.2012 в 22:41)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:34)
 

Попробую сделать тогда вместо всего того,что писала так

$s = mysql_query(" UPDATE tab SET nakop=nakop+ar WHERE date>$enddate "); 

  Ответить  
 
 автор: confirm   (20.09.2012 в 22:40)   письмо автору
 
   для: morozmoroz   (20.09.2012 в 22:34)
 

Вы можете без $n += чего-то... объяснить по какому принципу должно происходить обновление поля? Возможно ведь, что вам нужен будет всего лишь один единственный запрос на обновление, без всякой выборки предшествующей и тем более запросов в цикле.
Для этого вас и просят - объясните, напишите.

Если же для каждой из записи, новое значение, это нечто уникальное, которое не описывается единой для всех полей формулой, тогда да - выбрали, посчитали, в цикле обновляем. Но обновлять то надо с учетом ID, а не времени. Так как вы предварительный запрос (выборку) уже сделали по этому условию, а обновлять уже надо по конкретному id.

PS. На экран вы выводили, надо полагать $n, вот и казалось, что правильно, а что в это время в базе происходило, осталось за кадром, хотя и так понятно, что не то, что хотелось бы.

  Ответить  
 
 автор: morozmoroz   (20.09.2012 в 22:34)   письмо автору
 
   для: confirm   (20.09.2012 в 22:26)
 

Я,НАВЕРНОЕ,не понимаю.Да,так и получилось,что у меня в таблице поменялись все nakop на последнее значение за все дни.НО на экран я выводила-все правильно формируется в переменной $n.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования