首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免使用这个嵌套的while循环并在其中执行SQL查询?

问如何避免使用这个嵌套的while循环并在其中执行SQL查询?
EN

Stack Overflow用户
提问于 2016-06-30 21:50:48
回答 0查看 115关注 0票数 0

我必须从这些表中检索某些数据,这是正确的(我认为),但我实现它的方法,是非常慢的,可能是糟糕的编程,我只是为我自己做了这件事,所以做一个好看的代码不是优先考虑的,但它必须在“正常”时间内运行,而不是像现在它运行在10-15秒~。

下面是我的代码:

代码语言:javascript
复制
$arr1=[];

$sqlquery="Select codart,canped,codpro 
           from gcpedl 
           where gcpedl.numped in (
                                   select numped 
                                   from gcpedc 
                                   where texto like '".$_POST['codobra']."'
                                   )";
$query_execute = mssql_query($sqlquery);

while($query_result=mssql_fetch_array($query_execute)){
    $arr1=$query_result;
    $sqlq="Select distinct alart.codart,pultcomp,alart.codpro 
           from alart,gcpedl 
           where gcpedl.numped in 
                 ( select numped 
                   from gcpedc 
                   where texto like '".$_POST['codobra']."') 
                     and alart.codart in 
                        (Select codart 
                         from gcpedl 
                         where numped in 
                             ( select numped 
                               from gcpedc 
                               where texto like '".$_POST['codobra']."')) ";
    $sqlex =mssql_query($sqlq);

    while($sqlre=mssql_fetch_array($sqlex)){
        if (    trim(strtoUPPER($sqlre['codart'])," ")==trim(strtoUPPER($query_result['codart'])," ") 
            and $sqlre['codpro']==$query_result['codpro'] )
        {
            if (    $arr1['codart'] != 'CUADRO' 
                and $arr1['codart'] != 'cuadro' 
                and $arr1['codart'] != 'instalacion' 
                and $arr1['codart'] != 'INSTALACION')
            {
                $materiales= $materiales+ ($sqlre['pultcomp']*$arr1['canped']);
            }
        }
    }

编辑:这段代码的目的是遍历每个文章( codart ),并获取它的数量(Canped)和它的提供者(Codpro),然后遍历另一个表中的每一篇文章,匹配codart和提供者,并取出价格(Pultcomp)与数量相乘。

Edit2:为了从第一个表(Gcped1)和第二个表(Alart)中选择文章,我必须将它们与第三个表(Gcpedc)和where子句进行再选择(或连接)。

Edit3:不能只用一个查询就能让它工作,我已经走得更远了:

代码语言:javascript
复制
$arr1=[];

$sqlquery="Select  g1.codart,
                g1.canped,
                g1.codpro 
        from gcpedl as g1
        inner join gcpedc as g2
            ON g1.numped = g2.numped
        where g2.texto like '".$_POST['codobra']."'";
  $query_execute = mssql_query($sqlquery);

while($query_result=mssql_fetch_array($query_execute)){
    $arr1=$query_result;
        $sqlq="Select distinct  a.codart,
                    a.pultcomp,
                    a.codpro 
    from alart AS a
    inner join gcpedl AS g
        on a.codart = g.codart 
    inner join gcpedc g1
        on g.numped = g1.numped 
    where g.numped in (select numped from gcpedc where texto like '".$_POST['codobra']."') ";
    $sqlex =mssql_query($sqlq);

    while($sqlre=mssql_fetch_array($sqlex)){if (trim(strtoUPPER($sqlre['codart'])," ")==trim(strtoUPPER($query_result['codart'])," ") and $sqlre['codpro']==$query_result['codpro'] ){
        if ($arr1['codart'] != 'CUADRO' and $arr1['codart'] != 'cuadro' and $arr1['codart'] != 'instalacion' and $arr1['codart'] != 'INSTALACION'){
$materiales= $materiales+ ($sqlre['pultcomp']*$arr1['canped']);}

我最终解决了它,只是我睡得太沉了,查询可以转换成只有一个查询,执行时间大大减少了。

代码语言:javascript
复制
Select gcpedl.codart, (gcpedl.canped*alart.pultcomp) as precio, alart.codpro from alart,gcpedl where gcpedl.numped in (Select numped from gcpedc where texto like '".$_POST['codobra']."') and alart.codart=gcpedl.codart and alart.codpro=gcpedl.codpro 
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38125140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档