Допустим, у нас есть база данных, касающаяся кредитов клиентам в бизнесе, у нас есть таблица кредитов (в простейшем виде, 5 столбцов):
- ID int(10) PK Auto_Increment,
- CustomerID int(10),
- Amount decimal(10,2),
- TotalLoan decimal(10,2),
- Date datetime
, так как клиенты ежедневно берут кредиты, мы вставляем новыезаписи в таблицу, TotalLoan
является кредитом клиентов до этого времени. таким образом, в случае редактирования старой записи и исправления Amount
денег, TotalLoan
этой записи и всех более новых, так как отредактированная дата записи также должны быть исправлены. Подход состоит в том, чтобы сделать сотни запросов на обновление в программе для обновления каждой записи, что я считаю неэффективным и не лучшим способом. Второй подход, о котором я думаю, заключается в использовании программного кода (PHP или Java), который, на мой взгляд, является хорошим способом, если мы не можем выполнить его с помощью процедур MySQL (что наиболее эффективно), но проблема в том, что я не могуобновите значение TotalLoan
для этой строки постоянно в каждом цикле, поэтому вот пример кода, который я пробовал до сих пор:
DELIMITER //
create procedure update_loans(IN CID INT)
BEGIN
DECLARE amount DECIMAL DEFAULT 0;
DECLARE loan DECIMAL DEFAULT 0;
DECLARE current_total_loan DECIMAL DEFAULT 0;
DECLARE result CURSOR FOR
SELECT Amount, TotalLoan FROM loans WHERE CustomerID = CID ORDER BY Date ASC;
open result;
result_loop: LOOP
FETCH result INTO amount, loan;
IF finished = 1 THEN
LEAVE result_loop;
END IF;
SET current_total_loan = current_total_loan + amount;
set loan = current_total_loan; -- changing loan variable doesn't change actual stored database value for loan in current row.
END LOOP result_loop;
close result;
END