помогите пожалуйста составить запрос.
есть
stat:
partner_id | day | day_amount
и
partners
id | total_amount
нужно обновить total_amount
по следующему прниципу -
total_amount=total_amount+(day_amount*someval-day_amount) where day = anotherval
т.е. выбрать day_amount, умноженное на someval для каждого partner_id, где day равен тому-то, и приплюсовать все это к total_amount cоответственно для каждого id
подскажите как сделать?я вообще в тупике, из доки я понял что с update вообще нельзя использовать ни join, ни union.
mysql UPDATE
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Не надо было использовать такое говно, как MySQL.я вообще в тупике, из доки я понял что с update вообще нельзя использовать ни join, ни union
Тут можно только идти по резалтсету одной таблицы, и по выфетченным значениям делать апдейты другой таблицы.
Но возникает ряд принципиальных вопросов:
1) Многопользовательский доступ. Что будет, если в момент, когда один пользователь делает тучу апдейтов, другой запустит тучу апдейтов по тем же таблицам? Можно блокировать таблицы (LOCK TABLE), но это хреновое решение.
2) Что случится, когда во время Такого вот обновления грохнется обновляющий процесс? Половина данных будет обновлена, половина нет. Нормальных транзанкций ведь в MySQL нет.
2B OR NOT(2B) = FF
Absurd, Многопользовательский доступ в данном случае не проблема, ибо такую роцедуру может запустить только админ. использую mysql,т.к. выбора нет.
$res = mysql_query('SELECT * FROM stat WHERE day = someval');
while($row = mysql_fetch_assoc($res))
mysql_query('UPDATE partners SET total_amount=total_amount+$row['day_amount'] where id = $row['partner_id']')
или всё-таки можно как-то всё это провернуть, без запросов в цикле?
ты имеешь в виду что-то типа этого:Тут можно только идти по резалтсету одной таблицы, и по выфетченным значениям делать апдейты другой таблицы
$res = mysql_query('SELECT * FROM stat WHERE day = someval');
while($row = mysql_fetch_assoc($res))
mysql_query('UPDATE partners SET total_amount=total_amount+$row['day_amount'] where id = $row['partner_id']')
или всё-таки можно как-то всё это провернуть, без запросов в цикле?
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Обычно все юзают какое-нибудь говно мамонта типа 3.x.x. Но если у тебя версия поновей, то не все может и потеряно.можно как-то всё это провернуть, без запросов в цикле?
(Из документации)
Starting with MySQL 4.0.4, you can also perform UPDATE operations that cover multiple tables:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
2B OR NOT(2B) = FF