Посоветуйте выход из ситуации: не получается запрос к БД

alexeyco

Новичок
Посоветуйте выход из ситуации: не получается запрос к БД

Здравствуйте! Предположим, существует некий счет. И существует по нему ряд операций. Операции по поступлению и по списанию средств. Итак, таблица transactions:

transaction_id (понятно, думаю),
transaction_value (размер транзакции),
transaction_result (результат)

Подробнее по последнему полю: чтобы четко и безболезненно выводить результат каждой транзакции, я счел необходимым хранить результат операции в той же таблице. Фактически, это переходящий остаток.

При создании новой транзакции, а так же при удалении существующей, мы вынуждены пересчитать результаты. Возникает ошибка в следующем запросе:

PHP:
UPDATE 
transactions 
SET transaction_result = (
  SELECT 
    SUM(t.transaction_value) 
  FROM 
    transactions as t 
  WHERE 
    t.transaction_id >= transaction_id
)
Ну как-то так. Я особенно не морочился с оптимизацией запроса, просто вот такая идея - и ошибка. Посоветуйте, пожалуйста, выход.
 

Wicked

Новичок
— вот ты и облажался — сказала MySQL и смачно сплюнула на пол

[m]mysql_error[/m]
 

nalim

Новичок
гыгы в MYSQL так низя низя делать селект, можно через запятую указать таблицы к UPDATE
 

nalim

Новичок
да кстати что за ошибка то?)

-~{}~ 02.12.08 12:57:

Currently, you cannot update a table and select from the same table in a subquery.

Ну так предельно понятно: так делать низя говорит тебе(alexeyco ) mysql)

Лучше всетаки ты заморочся и сделай как надо)
 

alexeyco

Новичок
Дак вот и прошу совета - есть ли возможность уместить все это в 1 запрос?

А про то, что так делать нельзя, я и сам прочитать могу, спасибо. Английский вроде бы тоже знаю. Давно тут флуд разрешили?
 

alexeyco

Новичок
Единственное что я почерпнул из всего того - это делать так: разложить транзакции и результаты транзакций в 2 таблицы. Тогда при добавлении транзакции мы должны дублировать id транзакции и обновить в таблице результатов. При выборке результатов мы делаем сложный запрос и получаем массив тем же способом. Однако, это не совсем удобно, ведь в таком случае слишком велика вероятность сбоя. Это раз.

Два: я ничего не говорил про mysql. Ровно как и про другие движки БД. Есть ли ансишные способы таковое провернуть - и если есть, то какие?

-~{}~ 02.12.08 14:36:

Итак, вот к чему я пришел... может кому-то когда-то понадобится

При добавлении транзакции при прочих равных нам известно кол-во средств на счете на момент добавления транзакции. Соответственно, до добавления транзакции в базу, мы можем вычислить сумму счета. Понимаете да?

Траблы возникают при удалении транзакции. Нам надо пересчитать результаты всех транзакций с последующим id. Сделать это можно двумя запросами:

1. Находим $value. ID удаляемой транзакции положим $id
PHP:
SELECT transaction_value FROM transactions WHERE transaction_id = '$id' LIMIT 1
2. Положительная ли эта транзакция (поступление на счет) или отрицательная (списание со счета) - не важно. Размер всех последующих уменьшится на размер транзакции, то есть, на $value.
PHP:
UPDATE transactions SET transaction_value = transaction_value - '$value' WHERE transaction_id > '$id'
 
Сверху