-3

嗨,我有一个需要修复的程序。这是问题所在:

例如我有:

2 的免费学分和 5 的常规学分。

例如,我想以 3 个积分购买一件商品。

我想扣除 2 个免费学分和 1 个常规学分。

所以剩余的余额将是 0 个免费积分和 4 个常规积分。

免费学分将在常规学分扣除之前先扣除。

在我现有的程序中,如果我用 3 学分购买 1 件商品

这是余额:-1 免费积分 5 常规积分

不是那样的。

我想要这样:0 个免费积分 4 个常规积分

我希望有人可以在这个问题上帮助我。谢谢你。

4

1 回答 1

1
$free_credits -= $cost;
if($free_credits < 0) {
    $regular_credits += $free_credits;
    $free_credits = 0;
}

或者最好直接在 SQL 中:

START TRANSACTION;
    SELECT @ok := (free_credits + regular_credits) > :cost
        FROM user_credits WHERE id = :id  FOR UPDATE;

    IF @ok THEN
        UPDATE user_credits
            SET
                free_credits = free_credits - :cost,
                regular_credits = regular_credits + IF(free_credits < 0, free_credits, 0)
            WHERE id = :id
    ELSE;
        /* something to cause the commit to fail */
    END IF;
COMMIT;

作为技术性,为此需要对 free_credits 的数据类型进行签名

于 2012-05-21T06:56:16.483 回答