循环记录并更新付费状态

时间:2013-04-30 04:02:38

标签: mysql sql stored-procedures

我有三张桌子:

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排序),并将status更改为已付款的广告。

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

那么如何考虑在donations_required表格中完全不同的帐户来标记这样的状态。

我是否需要存储过程?

1 个答案:

答案 0 :(得分: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 ;

希望有所帮助