我需要一些关于正确实现数据库架构的建议。我有一个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`
); ";
答案 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(); 然后根据您从查询中提取的月份创建表名。