我有一个cron脚本,每天运行,将数据INFILE加载到MySQL数据库中。我想,使用PHP作为web应用程序的一部分,生成一份每周报告,显示在过去7天中插入的记录总数。
我想知道最好的办法。修补或修改MySQL不是一个选项,也不能更改数据插入的方式。我倾向于在插入之前避免计算CSV文件,因为将这些数据bac读入PHP会很麻烦。
有什么建议吗?
发布于 2009-07-12 09:31:59
它必须在PHP应用程序中吗?在cron脚本中,您可以计算要插入的行数,并将它们添加到日志文件或mysql db中的一个小日志表中(除非这就是修改mysql的意思)。我不确定,但我想myql函数row_count()也能处理INFILE数据,因此计算数字很容易。
而且,可能是最简单的方法,如果插入后未修改行,则可以向数据库添加一个时间戳列,该列将自动设置为插入日期,并将数字计数(),为期一周。
发布于 2009-07-16 20:45:22
在运行LOAD数据INFILE查询后立即使用PHP ()函数。这将返回如下所示的字符串:
记录:1删除:0跳过:0警告:0
请参见php函数参考: mysql_信息()相关的mysql_受影响_行()函数。
无论您做什么,都不要依赖于显示表状态中的行计数。根据存储引擎的不同,它可能是非常不正确的,并且只对查询优化器对优化做出一些更好的判断非常有用。这在显示表状态中有文档记录(这里引用了特定的部分)
行行数。一些存储引擎(如MyISAM )存储确切的计数。对于其他存储引擎,如InnoDB,这个值是一个近似值,并且可能与实际值相差40 %至50%。在这种情况下,使用SELECT COUNT(*)获得准确的计数。对于INFORMATION_SCHEMA数据库中的表,行值为空。
发布于 2009-07-12 09:31:53
如果您感兴趣的是特定模式和表中的行数(假设没有行删除),那么您可以使用MySQL命令show table status或命令行use mysqlshow --status dbname。这将为模式中的每个表列出一些扩展信息,包括行计数(或者您可以使用like来选择特定的表)。
可以使用简单的SQL从INFORMATION_SCHEMA数据库检索相同的数据,可能如下所示:
选择Table_name,SUM(Table_rows),从INFORMATION_SCHEMA.PARTITIONS中选择TABLE_NAME (‘table2 1’,'table2');
您可以创建一个简单的cron作业,每天获取这个快照一次,然后可以很容易地从PHP中提取出有用的数据。见鬼,您甚至可以将它存储在数据库表中;-)
https://serverfault.com/questions/39516
复制相似问题