mysql - 根据创建日期选择最后两个表

时间:2015-03-29 04:49:40

标签: php mysql phpmyadmin

我需要一些关于正确实现数据库架构的建议。我有一个cron脚本,其主要功能是解析HTML文档 => 创建数据库tbl => 插入记录

我习惯每月只运行一次这个脚本,但我需要更频繁地执行此操作,这意味着我的数据库表会显着增加。目前我的表格遵循以下格式:table_03,其中最后两位数代表当前月份。

现在我正在考虑使用PHP time()函数来替换当前月份 我的第一个问题,这是一个接近它的好方法吗?

我的第二个问题是你如何创建一个动态SELECT语句,根据日期获取数据库中的最后两个表?或者可能更好地知道是否有一个MySQL查询来完成这项工作,而不是依赖于表名?

e.g

table_29_03 // 29月3日 table_26_03 // 26 Mar ...
table_25_03
...

我的查询应该返回最后两个或三个表之间的差异,但没有一致的日期(每月)我不知道该怎么做。

目前我正在做以下事情:

$thisMonth = 'table_'.date('m');
$PrevMonth = 'table_'.date('m', strtotime('first day of last month'));

// find new records in this table not available in previous one
$sql = "
  SELECT * FROM `".$thisMonth."` WHERE `".$thisMonth."`.`id`
  NOT IN (
  SELECT `".$PrevMonth."`.`id`
  FROM `".$PrevMonth."`
  WHERE `".$thisMonth."`.`id` = `".$PrevMonth."`.`id`
          ); ";

1 个答案:

答案 0 :(得分:0)

我的第二个问题是你如何创建一个动态SELECT语句,根据日期获取数据库中的最后两个表?

这是你想在MySQL中实现的目标吗?

SELECT create_time,table_name 
FROM INFORMATION_SCHEMA.TABLES 
ORDER BY create_time DESC LIMIT 2

您可以添加其他过滤器,例如我们应该从哪个模式中提取数据等等...

关于你的第一个问题,我现在使用gmdate来提取月份和年份。

$now = time();
$month =  gmdate("m", $now);
$year =  gmdate("y", $now);

gmdate:返回的时间是格林威治标准时间(GMT)。

使用time();设置您的月份是正常的,我可以看到没有问题。

备注:如果您在不同的计算机上运行PHP和MySQL,如果这两个日期时间未同步,则会出现一些时间差异。如果你想要两者的准确时间表示。你应该依赖一台机器。

如果您希望PHP处理时间记录,您可以在表中包含一个列,例如'created_at',它根据PHP time()显示生成时间;

如果您希望MySQL处理它,您可以先查询当前日期     选择curdate(); 然后根据您从查询中提取的月份创建表名。