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

标签 php mysql phpmyadmin

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

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

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

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

例如

table_29_03//3 月 29 日
table_26_03//3 月 26 日...
表_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`
          ); ";

最佳答案

我的第二个问题是如何创建一个动态 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(); 然后根据您从查询中获取的月份创建表名称。

关于php - mysql - 根据创建日期选择最后两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29325711/

相关文章:

php - Symfony:FormType、Entity、queryBuilder - 如何更改生成选项的值?

php - 将数组重构(转置)为唯一键

PHP/MySQL - 如果查询失败如何删除插入?

mysql - MySQL 数据透视表中的分组依据

mysql - 在 ubuntu 12.04 上安装 mysql workbench 时出现依赖错误

MySQL REPLACE 语句不正确? "A new statement was found, but no delimiter"

php - Magento 1.4 Catalog_eav_attribute - 添加了自定义列但值未保存

php - 从 PHP 脚本绑定(bind)到套接字时遇到问题

php - 按日期过滤器选择结果 PHP 和 MySQL

mysql - 同样的条件,不同的结果?