我正在开展一个项目,该项目记录了一天所花费的金额。 可以说数据库中的开始日(第一个条目)是2013年1月1日。 现在我每天都会向数据库提交一个条目,但有些日子我不能。该表如下所示:
DATE_的 _ __ _ _ | 的 的 __ _ __ _Spent
2013-01-09 | 2000
2013-01-11 | 1200
假设今天是2012年1月11日,我忘了在2012年10月1日进入。现在我想用php + mysql编写代码,它将遍历表并检查第一个条目和最新条目之间是否缺少任何日期。当它发现缺少10-jan-2012那天的条目时,它应该在已用完的列中创建数量为0的条目。我怎样才能做到这一点?有没有比我尝试使用的方法更好的方法?
答案 0 :(得分:2)
实现此目的的唯一方法是在具有完整日历的表格上JOIN
或制作日期表。你可以写一个光标,但它被认为是最后的手段。
答案 1 :(得分:1)
这是我的建议,创建一个文件来存储脚本运行的最后日期,假设今天(2013-01-11)你运行的脚本比它只存储在那个文件中的2013-01-11,如果你明天再次运行它将存储明天的日期2013-01-12。
我们将使用此日期创建查询并缩短处理时间。
存储在文件中的日期是我们的$ minDate,
使用查询从db中找出最大日期,说它是$ maxDate,
查询:选择日期,从表中花费日期('日期')> $ minDate;
将结果存储在数组$ dateArray
中使用$ minDate和$ maxDate
之间的句点创建一个日期数组$starting_date = new DateTime($minDate." 00:00");
$ending_date = new DateTime($maxDate." 23:59:59");
$interval = new DateInterval('P1D');
$period = new DatePeriod($starting_date , $interval, $ending_date);
foreach ($period as $date) {
$curDate=$date->format('Y-m-d');
if(!in_array($curDate,$dateArray)){
//insert new row with $curDate
}
}
update lastProcessedDate in your file
答案 2 :(得分:0)
您可以创建一个存储过程并安排它每晚运行。像创建光标循环遍历表,按日期列排序,然后检查上一条记录以查看缺少的天数,如果大于1,则单独插入。
答案 3 :(得分:0)
我会这样做:创建一个cronjob,它在凌晨(比如凌晨2点左右)运行你的PHP脚本。 该脚本将使当前日期减去1(昨天)并对数据库使用选择查询。如果找不到条目,它将创建一个条目。 当你每天都在运行时,你会确保昨天总是有一个条目。