我的情况是有一个人和他/她的每周付款
每个人应该支付一定数额,比方说100,000。
如果他未能达到10万,那么它将持续到下周。
如果(s)他通过了100,000,则会减少下一周的金额
周从星期六开始。
我在想这样的设计。我知道这是错的。所以帮助我这个
更新的
此外,我需要标记该用户是否已支付本周的会费。所以要保持某种状态
我已经意识到也许我可以使用这个
SELECT ROUND(DATEDIFF( CURRENT_DATE, "2010-01-04")/7, 0) AS weeksout
这意味着我可以开始计算日期并在支付表中使用我的索引。
周
-->id
-->week_no
-->start_date
-->end_date
付款
-->id
-->person_id
-->week_no
-->amount
-->date
PAYMENT_STATUS
-->person_id
-->week_no
-->status
-->balance
-->carry
使用Payment_status我可以跟踪周状态(付费,未付款,部分付费)。
我仍然对此感到不舒服,我不知道为什么。
答案 0 :(得分:0)
我认为你可以使用以下表格结构
PERSON (ID,NAME,...,weekly_payment_amount)
PAYMENT (YEAR,MONTH,WEEK,PERSON_ID,AMOUNT);
对于每个星期,您都可以在付款方式中为所有人提供服务 因为周期如果人们已经完成了他的目标,他将有0美元,因为本周将会增加和完成的金额将会增加到下周 如果他为即将到来的一周完成额外的金额将会增加一个额外的部分
当您按照以下方式插入新的内容时,您必须处理代码级别的某些逻辑
$AMOUNT = WORKED AMOUNT FOR THIS WEEK
CHECK IF ANY VALUE AVALABLE FOR THAT WEEK
$AMOUNT_EXP= SELECT weekly_payment_amount FROM PERSON WHERE PERSON_ID ="";
$AMOUNT_ADD= SELECT IFNULL(AMOUNT,0) AS FROM PAYMENT WHERE YEAR="" AND MONTH="" AND WEEK="" AND PERSON_ID ="";
IF ($AMOUNT_ADD>0) THEN {
IF $AMOUNT_EXP> $AMOUNT_ADD+ $AMOUNT THEN {
UPDATE PAYMENT SET AMOUNT= 0 WHERE YEAR="", MONTH="", WEEK="", PERSON_ID ="";
INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,$AMOUNT_ADD+ $AMOUNT);
}
ELSE {
UPDATE PAYMENT SET AMOUNT=$AMOUNT_EXP WHERE YEAR="", MONTH="", WEEK="", PERSON_ID ="";
INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,($AMOUNT_ADD+ $AMOUNT)-$AMOUNT_EXP);
}
}
ELSE {
IF $AMOUNT_EXP> $AMOUNT_ADD+ $AMOUNT THEN {
INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR CURRENT WEEK>,0);
INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,$AMOUNT_ADD+ $AMOUNT);
}
ELSE {
UPDATE PAYMENT SET AMOUNT=$AMOUNT_EXP WHERE YEAR="", MONTH="", WEEK="", PERSON_ID ="";
INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,($AMOUNT_ADD+ $AMOUNT)-$AMOUNT_EXP);
}
}