我需要一些关于正确实现我的数据库模式的建议。我有一个cron脚本,它的主要功能是分析HTML =>创建一个DB =>插入记录
我习惯于每月只运行这个脚本一次,但是我需要更频繁地运行它,这意味着我的数据库表将显著增加。目前,我的表遵循以下格式: table_03,其中最后两位数表示当前月份。
现在,我正在考虑使用PHP ()函数来替换当前月份。
我的第一个问题,这是一个很好的方法吗?
我的第二个问题是如何创建一个动态SELECT语句,根据日期获取数据库中的最后两个表?或者更好的方法是知道是否有一个MySQL查询来完成这项工作,而不是依赖于表名?
e.g
table_29_03 /3月29日
3月26日table_26_03 // .
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`
); ";发布于 2015-03-29 05:21:44
我的第二个问题是如何创建一个动态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);返回时间是格林尼治标准时间(格林尼治标准时间)。
使用time();来设置你的月份是没问题的,我看不出有什么问题。
附带注意:如果您在不同的机器上运行PHP和MySQL,如果这两台机器的日期时间没有同步,那么在时间上会出现一些差异。如果您想要一个精确的时间表示两者。你应该依靠一台机器。
如果您希望PHP处理时间记录,您可以在表中包括一个列,如'created_at‘,它根据PHP ()指示生成时间;
如果希望MySQL处理它,可以先查询当前日期,选择curdate();然后根据从查询中获取的月份创建表名。
https://stackoverflow.com/questions/29325711
复制相似问题