更新表中的每个条目

时间:2016-11-29 13:49:29

标签: php mysql

我正在创建一个正在运行的库存系统。我正在寻找有关如何加快处理包含每日库存的表格的处理时间的建议。

我正在使用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 个答案:

答案 0 :(得分:1)

存储过程和用户​​定义函数是您正在寻找的。您可以安排它们在特定时间运行以对表执行操作。

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

按顺序提取 - 转换 - 加载