mysql - select 最后两个表格基于其创建日期

mysql - select last two tables based on their date of creation

我需要一些关于正确实施我的数据库模式的建议。我有一个 cron 脚本,其主要功能是 Parse HTML docs => Create a DB tbl => 插入记录

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

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

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

例如

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

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

目前我正在做以下事情:

$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`
          ); ";

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

这是您想在 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 处理时间记录,您可以在 table 中包含一列,例如 'created_at',它指示生成时间,基于 PHP 时间();

如果要MySQL处理,可以先查询当前日期 select curdate(); 然后根据您从查询中获取的月份创建 table 名称。