php - 显示过去 3 年中每 3 个月按标记支付的付款

标签 php mysql

我有一个名为 payment 的表,它有日期字段,我有一个叫 Mark 的客户,他已经连续 3 年每天付款了

Table: Payment  
Fields: Name , Amountpaid, date 

我想显示mark每3个月的付款记录以及3年的总付款金额

我希望结果是什么样的

First 3 months payment record table
total Amountpaid at the bottom of the table 

second 3 months payment record table
total Amountpaid at the bottom of the table 

Third 3 months payment record table
total Amountpaid at the bottom of the table 

以此类推3年

请大家帮忙

最佳答案

您似乎正在为此寻找 SQL 解决方案,但数据库是用于保存数据的,而不是用于将其格式化为报告的。为此,我的建议是:不要尝试在数据库中执行此操作,而是在前端代码中执行此操作

运行这样的查询将非常简单

SELECT * FROM payment WHERE 
  name = 'mark' and 
  `date` between date_sub(now(), interval 3 year) and now()
ORDER BY date

然后使用循环将结果放入 HTML 表中,并使用一个变量来跟踪支付总额。每 3 个月重置一次变量。如果你想让 MySQL 做更多的数据处理来帮助你,你可以这样做:

SELECT * FROM 
  payment 
  INNER JOIN
  (SELECT YEAR(`date`) + (QUARTER(`date`)/10) as qd, SUM(amountpaid) as qp FROM payment WHERE name = 'mark' GROUP BY YEAR(`date`), QUARTER(`date`)) qpt 
  ON
    qpt.qd = YEAR(`date`) + (QUARTER(`date`)/10)
WHERE 
  name = 'mark' AND
  `date` between date_sub(now(), interval 3 year) and now()
ORDER BY `date`

这将逐行提供所有标记的数据,并额外提供两列(大部分会一遍又一遍地重复),显示一年中的年份和季度(3 个月),例如 2017.1、2017.2,以及所有付款的总和那个季度制作的。现在在前端对其进行格式化不需要变量来保存支付金额的运行总额

这是关于格式化数据库中的数据时应执行的操作的限制(个人观点)。但是,如果您决定让 MySQL 完成所有这些工作,请继续阅读..

Ysth提到了rollup,它的目的是汇总数据..这样的解决方案看起来像这样:

SELECT
  Name, `date`, SUM(amountpaid) as amountpaid
FROM
  payment
WHERE 
  name = 'mark' AND
  `date` between date_sub(now(), interval 3 year) and now()
GROUP BY
  name,
  YEAR(`date`) + (QUARTER(`date`)/10),
  `date`
WITH ROLLUP

这种方法的唯一缺点是您还会获得按标记显示的所有付款的总计行。要抑制这种情况,请改用分组集:

SELECT
  Name, `date`, SUM(amountpaid) as amountpaid
FROM
  payment
WHERE 
  name = 'mark' AND
  `date` between date_sub(now(), interval 3 year) and now()
GROUP BY GROUPING SETS 
(
 (
  name,
  YEAR(`date`) + (QUARTER(`date`)/10),
  `date`
 ),
 (
  name,
  YEAR(`date`) + (QUARTER(`date`)/10)
 )
)

关于php - 显示过去 3 年中每 3 个月按标记支付的付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46066326/

相关文章:

javascript - 有没有办法用 Vue.JS SPA 刷新 Laravel Passport 的 cookie token ?

php - 添加重置按钮以使用 PHP 或 javascript 重置复选框

php - SQLSTATE [HY000] [1049] 未知数据库 ' register_login'

mysql - 从数据透视表返回单行

mysql - 在 MySQL 数据库中跟踪每个用户的 "blocked users"的最有效方法是什么?

php - Laravel - Larabook 教程 :Users. Codeception 确实看到了新记录

php - Laravel 迁移部署

php - Yii2 : How to pass additional parameters to listview

javascript - Laravel 如何将变量存储到数据库中并在每次点击时更新它

mysql - Rails 未索引位置