我需要一些关于正确实现我的数据库架构的建议。我有一个 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/