我正在编写一个使用MySQL管理收入和支出的系统,但是它需要能够处理常规订单,即每月,每季度或每年重复的收入或支出。
此外,理想情况下,如果关联的标题行被删除,我将触发查询以删除子行。
所以我有一张表,上面有名称,开始和结束日期,付款频率(M / A),我需要输出给定频率(M)一次或(A)每年一次的开始和结束之间的所有付款日期一个MySQL过程。
我的标题表说 sorders_head 的格式为
id, 1
name, Council Tax
payment, £300
start_date, 05/04/2018
end_date, 05/01/2019
frequency, M
我的行表显示 sorders_line 需要创建以下行
id
sorders_head_id, key to header table id
payment_date
payment
sorders_line表的输出应如下:-
1,1,05/04/2018,£300
2,1,05/05/2018,£300
3,1,05/06/2018,£300
etc. ending
10,1,05/01/2019,£300
我一直在尝试寻找一个MySQL过程的示例,该过程将使用MySQL以这种方式处理2个日期,我将继续寻找,任何帮助将不胜感激,谢谢。
我写了下面的程序,除了对频率通用外,它可以满足我的要求,现在我将继续工作..
BEGIN
DECLARE currDate DATE;
DECLARE endDate DATE;
SELECT *,
@currDate := min(DATE_FORMAT(sh.date_from, "%Y-%m-01")),
@endDate := max(DATE_FORMAT(sh.date_to, "%Y-%m-01"))
FROM
sorders_head sh
WHERE
code = 'PENS-TEST';
SET currDate = @currDate;
SET endDate = @endDate;
REPEAT
-- execute your queries for every frequency say MONTH
SELECT currDate;
-- ADD INSERT COMMANDS HERE
INSERT INTO sorders_line(code, name, type, paydate, amount, member_id, account_id, sorders_head_id)
SELECT code, name, type, `currDate`, amount, '1', '6', id
FROM sorders_head
WHERE
code = 'PENS-TEST';
-- ADD INSERT COMMANDS HERE
SET currDate = DATE_ADD(currDate,INTERVAL 1 MONTH);
UNTIL currDate > endDate
END REPEAT;
END
这成功将行插入到sorders_line表中
currDate
2012-09-20
currDate
2012-10-20
currDate
2012-11-20
currDate
2012-12-20
currDate
2013-01-20
等......
这现在可行,我只需要解决以下问题:-
1 /该程序应适用于不同的频率类型,例如(M或A)
2 /创建一个触发器以为sorders_head行的每个INSERT调用该过程 3 /使用上面显示的WHERE子句中的当前sorders_head.code值
4 /尽可能整合到我的wpDataTables中。
科林