首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -根据创建日期选择最后两个表

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

Stack Overflow用户
提问于 2015-03-29 04:49:39
回答 1查看 200关注 0票数 0

我需要一些关于正确实现我的数据库模式的建议。我有一个cron脚本,它的主要功能是分析HTML =>创建一个DB =>插入记录

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

现在,我正在考虑使用PHP ()函数来替换当前月份。

我的第一个问题,这是一个很好的方法吗?

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

e.g

table_29_03 /3月29日

3月26日table_26_03 // .

table_25_03

..。

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

目前,我正在做以下工作:

代码语言:javascript
复制
$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`
          ); ";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-29 05:21:44

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

这是您想要在MySQL中实现的吗?

代码语言:javascript
复制
SELECT create_time,table_name 
FROM INFORMATION_SCHEMA.TABLES 
ORDER BY create_time DESC LIMIT 2

您可以添加额外的过滤器,例如我们应该从什么模式提取数据,等等.

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

代码语言:javascript
复制
$now = time();
$month =  gmdate("m", $now);
$year =  gmdate("y", $now);

返回时间是格林尼治标准时间(格林尼治标准时间)。

使用time();来设置你的月份是没问题的,我看不出有什么问题。

附带注意:如果您在不同的机器上运行PHP和MySQL,如果这两台机器的日期时间没有同步,那么在时间上会出现一些差异。如果您想要一个精确的时间表示两者。你应该依靠一台机器。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29325711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档