Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据上载到MySQL数据库的问题_Php_Html_Mysql_Sql_Database - Fatal编程技术网

Php 将数据上载到MySQL数据库的问题

Php 将数据上载到MySQL数据库的问题,php,html,mysql,sql,database,Php,Html,Mysql,Sql,Database,你好!!请不要被我的文字墙吓坏了 我和我的工程团队正在尝试将HTML/PHP与MySQL数据库联系起来,同时使用R编程为网站用户提供快速、图形化的分析 我们的想法概要: 提示用户在网站上上传多张收据的.txt文件 将所述文件上载到预先存在的MySQL数据库 使用R查询和计算有用的统计信息 显示用户感兴趣的图形和统计信息 我们在R代码和计算计划方面取得了很多进展,但是我们的主要问题在于数据的上传 *收据文件都与此类似: 有多个文件,每个文件大小约为20MB。破折号表示收据相对于日期的开始/结束 我

你好!!请不要被我的文字墙吓坏了

我和我的工程团队正在尝试将HTML/PHP与MySQL数据库联系起来,同时使用R编程为网站用户提供快速、图形化的分析

我们的想法概要:

提示用户在网站上上传多张收据的.txt文件 将所述文件上载到预先存在的MySQL数据库 使用R查询和计算有用的统计信息 显示用户感兴趣的图形和统计信息 我们在R代码和计算计划方面取得了很多进展,但是我们的主要问题在于数据的上传

*收据文件都与此类似:

有多个文件,每个文件大小约为20MB。破折号表示收据相对于日期的开始/结束

我们的问题是:

根据我们目前的知识,解释--delimiter的唯一方法是使用if语句。考虑到文件长度的变化,我们将运行while循环直到结束。这些都是在PHP中完成的。这允许我们将“零售商ID”和“日期”作为变量保存在找到“收据ID”和“价格”的每一行中。此后,我们将这4个变量逐行上传到MySQL数据库中。我们决定不考虑“税”、“总额”和“付款类型”

例如,为了查询数据,我们希望数据库中的前两个条目如下所示:

显然,这需要很长时间。这会导致我们的网站出现致命的超时错误,我们无法更改该错误,因此我们不得不在循环中设置cnt<20000的限制,以便将某些内容输入数据库。它适用于我们需要的,但不是我们想要的,因为收据文件超过1000000行

我们一直在探索以下SQL代码的用法:

"LOAD DATA LOCAL INFILE '$file' 
INTO TABLE Receipts
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';"; 
这几乎可以立即成功上传整个收据,无论大小。尽管如此,我们仍然不知道如何删除破折号或将“日期”/“零售商ID”作为变量进行迭代,除非我们使用while循环。我们想完全删除它,因为它大大降低了我们网站的速度

我认为这将是一个更简单的方法,但所有的技术资源在线往往有点超出我们的头脑。在阅读了其中的一些之后,我们一直在探索Java的用法,但是再一次——哇


这是我们第一次使用PHP和MySQL,所以任何朝着正确方向的推动都是非常好的。一定有办法摆脱我们致命的while循环

在mysql中尝试多重插入查询。它允许您使用一条insert语句插入一整组记录。快得多


您应该同时执行多个插入,但不能执行大量插入

我解释说:

插入blabla值。。。。[x200 000]=mysql非常长

插入blabla值[x200 000]=非常长

插入blabla值[x100][x2000]=更快

一个非常大的事务处理时间很长,大量的小事务处理时间也很长。因此,您必须进行适度的交易,但其中有许多交易。更聪明地工作,而不是更努力地工作:

我希望它至少有一点清晰…

如果在将其粉碎到数据库之前用PHP进行一些预处理,这将非常容易。至少,尝试将其重新写入有效的CSV并导入。更好的是,使用带有占位符的PDO语句,并对数据重复运行它。
"LOAD DATA LOCAL INFILE '$file' 
INTO TABLE Receipts
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';";