问题上传数据到MySQL数据库

时间:2015-04-22 22:36:56

标签: php html mysql sql database

您好!请不要被我的文字墙吓到......

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

我们的想法概要:

  • 提示用户在网站上传多个收据的.txt文件
  • 将所述文件上传到预先存在的MySQL数据库
  • 查询&使用R
  • 计算有用的统计数据
  • 显示用户感兴趣的图表和统计信息

我们在R代码和我们计划的计划方面取得了很多进展,但我们的主要问题在于数据的上传。

*收据文件都与此类似:

enter image description here

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

我们的问题:

根据我们目前的知识,考虑“---”分隔符的唯一方法是使用if语句。考虑到文件长度的变化,我们运行一个while循环直到结束。这些都是用PHP完成的。这样我们就可以将'零售商ID''Date'作为'收据ID'的每一行的变量找到“价格”。之后,我们将这4个变量逐行上传到我们的MySQL数据库中。我们决定忽略'Tax''Total''付款方式'

例如,我们希望数据库中的前几个条目看起来像这样查询数据:

Part of Receipt_1

RetailerID | Date       | ProdID | Price
1          | 01/01/2014 | 79     | $7.93
1          | 01/01/2014 |  1     | $24.62

显然,这需要永远。它导致我们的网站有一个致命的超时错误,我们无法更改,所以我们必须在我们的循环中设置一个限制(cnt <20000),以便在我们的数据库中获取内容。它适用于我们需要的,但不是我们想要的,因为收据文件超过1,000,000行!

我们一直在探索这个SQL代码的用法:

"LOAD DATA LOCAL INFILE '$file' 
INTO TABLE Receipts
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';"; 

无论大小,几乎可以立即上传整个收据。尽管如此,除非我们使用while循环,否则我们不知道如何删除破折号或将'Date' / '零售商ID'重复为变量。我们希望完全消除这一点,因为它会大幅减慢我们的网站速度。

我认为这将是一种更简单的方法,但在线的所有技术资源往往有点过头了。在阅读了其中的一些内容之后,我们一直在探索Java的用法,但是再次 - whooooooosh。

这是我们第一次使用PHP和MySQL,所以任何朝着正确方向的推动都会很棒。必须有办法摆脱我们致命的循环!

2 个答案:

答案 0 :(得分:0)

在mysql中尝试多次插入查询。它允许您使用一个insert语句来插入一大堆记录。更快,更快。

http://www.electrictoolbox.com/mysql-insert-multiple-records/

答案 1 :(得分:0)

您应该同时进行多次插入,但不能进行大量插入。

解释自己:

Insert into blabla VALUES (), (), (), (), .... [x200 000] =很长时间用于mysql

Insert into blabla VALUES () [x200 000] =很长

Insert into blabla VALUES () [x100] [x2000] =更快

一个非常大的交易很难处理,也有大量的小交易。所以你必须做适度的交易,但其中很多都是。工作更聪明,而不是更难:)

我希望它至少有点清楚......