Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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_Mysql - Fatal编程技术网

PHP/MYSQL-循环内部更新。加载页面速度慢

PHP/MYSQL-循环内部更新。加载页面速度慢,php,mysql,Php,Mysql,我有一个使用mysql的工作更新查询,但目前加载页面的速度非常慢。有什么方法可以加快我的查询更新速度吗 这是我的代码 <?php $sql = "select ite_desc,ecr_desc, pric_cash, t.itemcode as itemcode ,sum(t.qty) as qty from ( select ite_desc,ecr_desc, pric_cash, itemcode,qty from barcode as

我有一个使用mysql的工作更新查询,但目前加载页面的速度非常慢。有什么方法可以加快我的查询更新速度吗

这是我的代码

<?php

    $sql = "select ite_desc,ecr_desc, pric_cash, t.itemcode  as itemcode ,sum(t.qty) as qty
        from ( 
    select ite_desc,ecr_desc,  pric_cash,   itemcode,qty  from barcode as bc inner JOIN allinvty3 as ait on bc.itemcode = ait.in_code
    union all
    select ite_desc,ecr_desc,  pric_cash,   itemcode,qty  from branchtobranch_tb as bb inner JOIN allinvty3 as ait on bb.itemcode = ait.in_code
    union all
    select ite_desc,ecr_desc,    pric_cash, itemcode,qty from adjustment_tb as adt inner JOIN allinvty3 as ait1 on adt.itemcode = ait1.in_code where adt.status='APPROVED'
    union all
    select ite_desc,ecr_desc,  pric_cash,   itemcode,qty  from stockreturn_tb as sb inner JOIN allinvty3 as ait on sb.itemcode = ait.in_code
    union all
    select ite_desc,ecr_desc,  pric_cash,   itemcode,qty  from notinclude_tb as nt inner JOIN allinvty3 as ait on nt.itemcode = ait.in_code where nt.status='COMPLETE'
    union all
    select ite_desc,ecr_desc,  pric_cash,   itemcode,qty  from purchase_tb as pt inner JOIN allinvty3 as ait on pt.itemcode = ait.in_code 
    union all
    select ite_desc,ecr_desc,   pric_cash, itemcode,(qty * -1) from soldout_pd as slp inner JOIN allinvty3 as ait2 on slp.itemcode = ait2.in_code) as t
    group by itemcode order by ecr_desc  ASC ";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {

    echo "

    </tr>";
    // output data of each row
     while($row = $result->fetch_assoc()) {
    $total =$row['qty'];
    $itemcode=$row['itemcode'];
    $sql1="UPDATE allinvty3 set sa_onhand = '".$total."' where in_code ='".$itemcode."'" ;
    $conn->query($sql1);
    }echo " </table>";}
    ?>

您可以通过单个查询执行此操作:

update allinvty3 a join
       (select t.itemcode, sum(t.qty) as qty
        from ((select ite_desc,ecr_desc,  pric_cash, itemcode, qty
               from barcode bc inner join
                    allinvty3 ait
                    on bc.itemcode = ait.in_code
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, qty
               from branchtobranch_tb bb inner join
                    allinvty3 ait
                    on bb.itemcode = ait.in_code
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, qty
               from adjustment_tb adt inner join
                    allinvty3 ait1
                    on adt.itemcode = ait1.in_code
               where adt.status = 'APPROVED'
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, qty
               from stockreturn_tb sb inner join
                    allinvty3 ait
                    on sb.itemcode = ait.in_code
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, qty
               from notinclude_tb nt inner join
                    allinvty3 ait
                    on nt.itemcode = ait.in_code
               where nt.status='COMPLETE'
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, qty
               from purchase_tb pt inner join
                    allinvty3 ait
                    on pt.itemcode = ait.in_code 
              ) union all
              (select ite_desc, ecr_desc, pric_cash, itemcode, (qty * -1) 
               from soldout_pd slp inner join
                    allinvty3 ait2
                    on slp.itemcode = ait2.in_code
              )
             ) t
        group by itemcode
       ) i
       on a.in_code = i.itemcode
    set a.sa_onhand = i.qty;
这将至少消除
更新
循环,让数据库而不是应用程序来完成工作。如果性能是一个问题,那么它可能是
联合所有人的问题。如果是这种情况,您必须调查每个子查询。

警告:当使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
数据直接放入查询,如果有人试图利用您的错误,这可能非常有害。