MySQL从标头父行创建和/或更新子表行以获得常规订单

时间:2018-08-07 20:10:06

标签: mysql

我正在编写一个使用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中。

科林

0 个答案:

没有答案