自动在数据库表中创建条目(php / mysql)

时间:2013-01-11 16:22:19

标签: php javascript mysql sql database

我正在开展一个项目,该项目记录了一天所花费的金额。 可以说数据库中的开始日(第一个条目)是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的条目。我怎样才能做到这一点?有没有比我尝试使用的方法更好的方法?

4 个答案:

答案 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(昨天)并对数据库使用选择查询。如果找不到条目,​​它将创建一个条目。 当你每天都在运行时,你会确保昨天总是有一个条目。