我有三张桌子:
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
表格中完全不同的帐户来标记这样的状态。
我是否需要存储过程?
答案 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 ;
希望有所帮助