2016-11-29 229 views
0

我正在创建正在运行的库存系统。我正在寻找关于如何加快处理时间来填充包含每日库存的表格的建议。更新表格中的每个条目

我有4个数据库表,我用这样做:
1)。日常使用表
2)。进货产品表(订购产品)
3)。实际盘点盘点表(这里持有的每月盘点盘点总数)
4)。永久运行库存表(在完美的世界里,这是库存应该是的)

截至目前,我的每条数据都在永久表中更新,而且我的代码需要很长时间才能运行, ,连接到数据库并更新信息。

我的问题是:
我该如何加快速度?有没有办法可以一次性上传数组中的所有信息,所以我只更新数据库一次而不是几百次?

对不起,以下倾倒75行代码,但我想确保显示一切,以便可以很容易地看到发生了什么。

我的后面的代码逻辑:
我通过拉动从所有4个表信息成阵列,然后通过循环阵列开始。我使用日期函数从2周前开始,而不是表格的开始(2016年初)。一旦满足日期配额,我将前一天的永久运行库存拉下来,减去当前日期的每日使用量,并添加当前包含的日期以获取当前日期。一旦我有永久性的日子,我会用这段数据更新永久表。

如果我只是简单地将信息存储到数组中,我基本上可以在整个表格上写下来吗?我假设这可能会快得多,如果有可能的话?

继承人的代码:

<?php 

    include("connection.php"); 

    /* $rowper below (Row Perpetual) */ 
    $query= "SELECT * FROM perpetual"; 
    $result = mysqli_query($link, $query); 

    /* $rowdaily below  */ 
    $query2= "SELECT * FROM dailyusage"; 
    $result2 = mysqli_query($link, $query2); 

    /* $rowpo below (Row Purchase Order) */ 
    $query3= "SELECT * FROM incomming"; 
    $result3 = mysqli_query($link, $query3); 

    /* $rowinv below (Row Inventory) */ 
    $query4= "SELECT * FROM inventory"; 
    $result4 = mysqli_query($link, $query4); 

    $checkdate = mktime(0, 0, 0, date('n'), date('d')-14, date('y')); 
    $checkdate= date('Y-m-d', $checkdate); 

    $b=1; 

    while (($rowper=mysqli_fetch_array($result)) and ($rowdaily=mysqli_fetch_array($result2)) and ($rowpo=mysqli_fetch_array($result3)) and ($rowinv=mysqli_fetch_array($result4))){ 

     $a=2; 

     if($b == 1){ 

      while($a< mysqli_num_fields($result)) { 
       /* $it holds the item #s from the column */ 
       $it[$a]=$rowper[$a]; 

       $a++; 

      }  
      $a=2; 
     } 

     if($rowper[1]>= $checkdate){  

      if($b>2){ 

       while($a< mysqli_num_fields($result)) { 

        $previnv[$a]; 

        if($rowinv[$a]!=0){ 

         $rowper[$a]=$rowinv[$a]; 

         $previnv[$a]=$rowper[$a]; 

         /* the 'p' is because column name was made by item # + p at end to make valid colum name */ 
         $query="UPDATE perpetual SET ".$it[$a]."p ='".$rowper[$a]."' WHERE date='".$rowper[1]."' LIMIT 1"; 

         mysqli_query($link, $query); 

        }else{ 

         $rowper[$a]=$previnv[$a] - $rowdaily[$a] + $rowpo[$a]; 

         $previnv[$a]=$rowper[$a]; 

         $query="UPDATE perpetual SET ".$it[$a]."p ='".$rowper[$a]."' WHERE date='".$rowper[1]."' LIMIT 1"; 

         mysqli_query($link, $query); 
        } 
        $a++;  
       } 
      } 
     } 
     $b++; 
    } 
?> 
+1

如果你每天都这样做,你可以在sql服务器中使用'stored procedures'。这样,所有这些都在sql服务器端完成,并且您不必等待查询数据并上传数据。 – atayenel

回答

1

存储过程和用户​​定义的函数,你在找什么。您可以安排它们在特定时间运行以在您的表格上执行操作。

请注意,记住ETL背后的基本原理。

提取 - 转换 - 加载按此顺序。

+0

我对PHP和MySQL非常陌生,但我还没有使用或阅读过有关存储过程或用户定义的函数。还没有了解ETL呢: -/ – Brandon

+1

查找mysql存储过程。你根本不需要PHP。使用ETL原则,在下一步之前分别执行每个步骤会更有效率。移动数据然后修改数据,然后按顺序分别插入数据。 – jacksonecac

+0

是否意味着我可以从上面的代码中删除更新行,然后以某种方式在最后插入所有内容? – Brandon