Большое спасибо ответившим

Цитата(edogs @ 07.08.2006, 17:49)

Раз каждое изменение индивидуально, то значит Вам всё равно придется делать 1 апдейт на 1 строку.
Вот это я и хотел узнать, что не существует варианта с единственным запросом, если каждое изменнение уникально и зависит от
внешних факторов
Цитата(edogs @ 07.08.2006, 17:49)

Значит задача сводится к тому, что бы сделать это в несколько приемов.
Лично мы делали бы примерно так, если надо за раз не запускать 1000 запросов.
Что бы не апдейтить одно и то же по нескольку раз
1) В каждое поле добавить дату последнего изменения. Её апдейтить при изменении поля. Скрипт выбирает допустим 10 полей которые не обновлялись последними. Апдейтит их нужным образом.
Или
2) Завести еще одну таблицу (или файл) где хранить уникальный ID последней апдейтеной строки. И выбирать 10 следующих после нее. Записывать ID конечно после апдейта.
Запускать скрипт можно
а) По крону (например простым GET/wget).
б) Выводить после завершения простую хтмл страницу с meta refresh=Х секунд на самого себя.
Неплохой идеей может являться лок таблицы на время апдейта, если апдейт конечно не 30 минут занимает. Будет работать быстрее и безопаснее.
Спасибо за советы, второй обязательно применю, если не перепишу базу таким образом, что бы не было внешних факторов.
Цитата(edogs @ 07.08.2006, 17:49)

А вообще, Вы уверены что не хотите переписать эту задачу на файлы? Файл считали, что надо проапдейтили, и назад записали. Хотя работать с результатом конечно труднее будет, особенно на сложных операциях. но Вы же не уточнили что делаете с данными кроме апдейта

Очень хотелось вынести это поле из базы в тестовый файл
Но помню очень бурный спор (не с Вами, но здесь, на форуме), где обсуждалось быстродействие MySQL против txt при одновременной работе с большим кол-вом данных...
Цитата(eSupport.org.ua @ 07.08.2006, 18:42)

В биллингах идет так:
На каждый учетный период в отведенной под это дело таблице накапливается история операций.
Затем когда происходит переход - данные из таблицы консолидируются select'ом и переходят в итоговую таблицу.
Сложно к пониманию, но информация к размышлению, спасибо

Цитата(eSupport.org.ua @ 07.08.2006, 18:42)

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

Цитата(edogs @ 07.08.2006, 19:05)

Можно сделать проще, посмотрите математические функции для операций с БД. Можно апдейтнуть всё за 1 запрос, вычисляя сумму вычета на базе данных о тарифе и используемых услугах.
P.S.: А историю операций вести надо по любому, esupport полностью прав.
Это было бы идеально, если бы не:
Таблица
clients содержит поле
ballans а так же поле
package_ID являющееся внешним ключем, а так же поле
personal_discount (где в процентах указана персональная скидка).
Таблица
packages содержит поле
cost (стоимость, например суточная)
(естесственно обе эти таблицы содержат не только эти поля)Пока еще можно проапдейтить одним запросом, типа
UPDATE clients SET clients.ballans = clients.ballans-packages.cost WHERE clients.package_ID = packages.idНу образно конечно написал, но что-то в этом образе посторить можно

Мешает то, что есть еще дополнительные факторы, влияющие на сумму снимаемую с ballans каждой конкретной строки - это как
personal_discount (персональная скидка), так и
addons (например "дополнительные услуги") определяющие итоговую сумму снимаемую с
ballansВ общем, пока писал-писал здесь пост, половину стрер, потому что вдруг понял, что модифицировать все записи одним запросом не нужно (не безопасно) - пришло понимание что и как сделать
edogs, спасибо за подсказку
Цитата
2) Завести еще одну таблицу (или файл) где хранить уникальный ID последней апдейтеной строки. И выбирать 10 следующих после нее. Записывать ID конечно после апдейта.
Это очень дельная мысль

Всем спасибо