mysql UPDATE

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: mysql UPDATE

Absurd » 14 дек 2004, 10:18

можно как-то всё это провернуть, без запросов в цикле?
Обычно все юзают какое-нибудь говно мамонта типа 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;

berkut » 13 дек 2004, 19:29

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']')
или всё-таки можно как-то всё это провернуть, без запросов в цикле?

Absurd » 13 дек 2004, 18:03

я вообще в тупике, из доки я понял что с update вообще нельзя использовать ни join, ни union
Не надо было использовать такое говно, как MySQL.
Тут можно только идти по резалтсету одной таблицы, и по выфетченным значениям делать апдейты другой таблицы.
Но возникает ряд принципиальных вопросов:
1) Многопользовательский доступ. Что будет, если в момент, когда один пользователь делает тучу апдейтов, другой запустит тучу апдейтов по тем же таблицам? Можно блокировать таблицы (LOCK TABLE), но это хреновое решение.
2) Что случится, когда во время Такого вот обновления грохнется обновляющий процесс? Половина данных будет обновлена, половина нет. Нормальных транзанкций ведь в MySQL нет.

mysql UPDATE

berkut » 13 дек 2004, 16:43

помогите пожалуйста составить запрос.
есть
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.

Вернуться к началу