从免费信用和常规信用的双减法?

时间:2012-05-21 06:47:33

标签: php mysql

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

例如我有:

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

例如,我想购买3个学分的项目。

我想扣除2个免费积分和1个普通积分。

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

免费积分将是扣除常规信用额度之前的第一笔。

在我现有的课程中,如果我购买1件3学分

这里是平衡出来的: -1免费积分 5个常规学分

哪个不是那样的。

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

我希望有人可以帮我解决这个问题。 谢谢。

1 个答案:

答案 0 :(得分: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的数据类型需要签名