【问题标题】:PHP - Bank like monthly transactionsPHP - 银行类每月交易
【发布时间】:2011-09-10 17:43:48
【问题描述】:

我不确定要输入什么搜索词。

我正在为出租代理建立一个记录支付租金的基本系统,我已经完成了这个没有问题。

下一步是在租金到期时进行可重复的交易,他们是否有任何教程或建议我应该如何完成这项壮举?

例如:

租户 1 需要在每个月的第一天支付 2 英镑的租金。

租户 2 需要每四个星期支付 1 英镑的租金。

【问题讨论】:

标签: php mysql calendar cron banking


【解决方案1】:

在表格中你将拥有

T1:
Tenant_id | repeatable | next_due

在另一张桌子上你会有

T2:
Tenant_id | Rent_date

使用如下查询:

SELECT 
  *
FROM
T1 JOIN
  (SELECT
    tenant_id, MAX(Rent_date) LastRent
  FROM
    T2
  GROUP BY 
    tenant_id
  ) MaxT2 on T1.tenant_id = MaxT2.tenant_id
WHERE
  MaxT2.LastRent + repeatable > T1.next_due

当您在此 SELECT 中找到某些内容时,将当前费率的交易插入 T2 并在 T1 中使用 Rent_date + 可重复更新 next_due

将此脚本放在一个文件中并使用 cron - 让它每天运行(最好在早上运行)。

这只是一个快速的答案。您必须注意可重复的字段(例如表示天数、周数或每月的第 10 天)。

【讨论】:

  • 感谢您的回复,这正是我想要的。可重复性可能是一个问题,有些人每四个星期支付一次,有些人每月支付一次。我想我可以找到解决方案,现在您已经提供了对查询的见解。
【解决方案2】:

你应该使用 crontabs 来完成这项任务,

# m h dom mon dow user  command
17 *    * * *   root    php /path/to/hourly.php
25 6    * * *   root    php daily.php
47 6    * * 7   root    php weekly.php
52 6    1 * *   root    php monthly.php

像这样……

【讨论】:

    【解决方案3】:

    您可以为每条付款记录保留四个字段 - payment_daterecurring_days_intervaloweprice。 然后,在每天运行的 cronjob 上,检查我们是否达到了天数间隔,如果是,则将 price 添加到当前的 owe。一旦该人支付了部分或全部账单,您将其从owe 减少。

    您应该每天运行的查询应该是这样的:

    UPDATE payments SET owe=COALESCE(owe, 0)+COALESCE(price, 0) WHERE recurring_days_interval IS NOT NULL AND DATE_ADD(payment_date, INTERVAL recurring_days_interval DAY) > NOW()

    如果您想停止重复,只需将recurring_days_interval 设置为NULL

    【讨论】:

    • 我需要更多的银行交易系统而不是余额系统。谢谢,您的回复帮助我理解了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多