【问题标题】:Get all months with number of months and days from 2 date?从 2 个日期开始获取所有月份的月数和天数?
【发布时间】:2016-09-10 06:14:32
【问题描述】:

这是我的 2 个 mysql 表。在clients 表中显示用户连接日期,在clients_pay_bill 表中显示用户从连接日期 (conn_date) 开始支付账单的月份。

a) 客户

clients_id    conn_date
=======================
1             2016-06-01     
2             2016-07-17
3             2016-06-22
4             2016-09-03

b)clients_pay_bill

cpp_id     clients_id    paid_month
===================================
1          1             2016-07-03 
2          2             2016-07-22
3          4             2016-09-09             
4          2             2016-07-22

现在我想显示所有月份s,其中包含在当前日期之前未向客户付款的天数和月份。

例如:

clients_id = 1 连接日期 (conn_date) 是 2016-06-01,他到目前为止只支付了 2016-07-03 个月的账单。所以sql查询会在下个月输出:

2016-06
2016-08
2016-09
**2016-07 will not print because he already paid this months bill**

我还想显示天数和月数,例如:3 个月的某些天..

我无法想象 sql 查询应该是什么样子?

【问题讨论】:

标签: php mysql date


【解决方案1】:

我会建议您采用一些不同的方法,因为这种方法会在逻辑和性能方面杀死您。应该这样做的方式是在clients_pay_bill 中分类记录,而不是在某人付款时,而是在他/她应该付款的时候,并且除了它应该有 2 列:due_datepaid_date。所以你的表格应该是这样的:

cpp_id     clients_id      due_month      paid_month
====================================================
1          1               2016-06-03     NULL 
1          1               2016-07-03     2016-07-03
1          1               2016-08-03     NULL
2          2               2016-09-22     NULL
3          4               2016-09-09     NULL   
4          2               2016-07-22     NULL

您可以通过 cron 生成每月到期通知,或者如果您更喜欢留在 SQL 中而不是通过事件来生成。之后,您可以进行简单的查询,选择哪个到期票据在paid_month 中具有NULL,如果付款已完成,您将更新paid_month 列。

关于天数,我不确定您想要达到什么效果(示例会有所帮助),但是如果有到期笔记列表,则计算这些记录上的天数已经完成了一半(例如,使用 DATEDIFF

【讨论】:

  • 哦,这确实是个好主意,但一开始我必须插入所有到期月,对吗?
  • 是的,您必须先设置 due_month(例如,每个月从 conn_date 开始,或者如果您愿意,您可以在每个月的第一天插入到期注释)
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多