1

我有三张桌子:

accounts:           `account_id`, `donations_req`, `payments_in, balance` 
donations_required: `donation_id`, `charity_id`, `account_id`, `amount`, `status`, `date`
payments:           `payment_id`, `account_id`, `amount`, `date`

donations_req我已经设法将每个捐助者的所有内容加起来并覆盖该donations_req字段以及该字段的付款,payments_in然后是余额(payments_in - donations_req)。

但是我需要的是;使用payments_in总数,循环遍历donations_required(按 排序)的列表,并将已支付的date更改为 1。status

例如:如果我有 3 笔捐款,每笔 50 美元,我存入 120 美元。余额为 -$30,前两次捐款应标记为已付款。

donations_required那么,考虑到表中完全有不同的帐户,我该如何标记这样的状态。

我什至需要存储过程吗?

4

1 回答 1

0

您可以使用存储过程来处理此问题,但不知何故,您不需要循环所有表,您只需要检查该人是否有足够的余额。如果不是,您也可以更新付款 ID 和用户 ID 中的状态。

希望它可以帮助你:) GBU

假设此人捐赠了三笔慈善基金,可以是今天或第二天。

第一种情况,此人同时捐赠了3笔捐款,因此可以通过存储过程检查此人是否有足够的余额,或者在这种情况下您允许此人捐赠的金额超过其余额

DROP PROCEDURE IF EXISTS `checkfunds`;
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `checkfunds`(IN `payment_id` VARCHAR(50), IN `account_id` VARCHAR(50), IN `amount` INT)
    COMMENT 'This procedure check the Balance'
BEGIN
DECLARE balance INT;

                SELECT BALANCE INTO balance from accounts where account_id = `account_id`
                IF balance > 0 AND balance > 'amount' THEN
                'allow'
                ELSEIF balance < 0 AND balance < 'amount' THEN
                'Not allow' <-- since you are here then update the status payment and your amount within your own calculation
                END IF;
END//
DELIMITER ;

希望能帮助到你

于 2013-04-30T04:20:13.147 回答