mysql - select 最后两个表格基于其创建日期
mysql - select last two tables based on their date of creation
我需要一些关于正确实施我的数据库模式的建议。我有一个 cron 脚本,其主要功能是 Parse HTML docs => Create a DB tbl => 插入记录
我已经习惯了 运行 这个脚本每月只用一次,但我需要更频繁地使用它,这意味着我的数据库 table 会显着增加。目前我的 table 遵循以下格式:table_03 其中最后两位数字代表当前月份。
现在我正在考虑使用PHP time() 函数来替换当前月份。
我的第一个问题,这是处理它的好方法吗?
我的第二个问题是如何创建动态 SELECT 语句,根据日期获取数据库中的最后两个 table?或者最好知道是否有一个 MySQL 查询来完成这项工作而不是依赖 table 名称?
例如
table_29_03 // 3 月 29 日
table_26_03 // 3 月 26 日...
table_25_03
...
我的查询应该 return 最后两个或三个之间的差异 table,但没有一致的日期(如每月)我不知道该怎么做。
目前我正在做以下事情:
$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 语句,根据日期获取数据库中的最后两个 table?
这是您想在 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 处理时间记录,您可以在 table 中包含一列,例如 'created_at',它指示生成时间,基于 PHP 时间();
如果要MySQL处理,可以先查询当前日期
select curdate();
然后根据您从查询中获取的月份创建 table 名称。
我需要一些关于正确实施我的数据库模式的建议。我有一个 cron 脚本,其主要功能是 Parse HTML docs => Create a DB tbl => 插入记录
我已经习惯了 运行 这个脚本每月只用一次,但我需要更频繁地使用它,这意味着我的数据库 table 会显着增加。目前我的 table 遵循以下格式:table_03 其中最后两位数字代表当前月份。
现在我正在考虑使用PHP time() 函数来替换当前月份。
我的第一个问题,这是处理它的好方法吗?
我的第二个问题是如何创建动态 SELECT 语句,根据日期获取数据库中的最后两个 table?或者最好知道是否有一个 MySQL 查询来完成这项工作而不是依赖 table 名称?
例如
table_29_03 // 3 月 29 日
table_26_03 // 3 月 26 日...
table_25_03
...
我的查询应该 return 最后两个或三个之间的差异 table,但没有一致的日期(如每月)我不知道该怎么做。
目前我正在做以下事情:
$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 语句,根据日期获取数据库中的最后两个 table?
这是您想在 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 处理时间记录,您可以在 table 中包含一列,例如 'created_at',它指示生成时间,基于 PHP 时间();
如果要MySQL处理,可以先查询当前日期 select curdate(); 然后根据您从查询中获取的月份创建 table 名称。