1

私は3つのテーブルを持っています:

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_reqpayments_inpayments_in - donations_req

しかし、私が必要とするのは; payments_in合計で、( でソートされた)のリストをループし、支払いdonations_required済みの を 1 にdate変更します。status

例: $50 の寄付が 3 つあり、$120 を入金したとします。残高は -$30 になり、最初の 2 つの寄付は支払い済みとしてマークされます。

donations_requiredでは、表にさまざまなアカウントがあることを考慮して、このようにステータスをマークするにはどうすればよいでしょうか。

ストアドプロシージャも必要ですか?

4

1 に答える 1

0

ストアド プロシージャを使用してこれを処理できますが、何とかしてすべてのテーブルをループする必要はありません。チェックする必要があるのは、その人に十分な残高があるかどうかだけです。そうでない場合は、支払い ID とユーザー ID 内のステータスも更新できます。

それがあなたを助けることを願っています:) GBU

この人が 3 つの慈善基金を寄付したと仮定しましょう。今日または翌日になる可能性があります。

最初のケースでは、この人は同時に 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 に答える