我必须从这些表中检索某些数据,这是正确的(我认为),但我实现它的方法,是非常慢的,可能是糟糕的编程,我只是为我自己做了这件事,所以做一个好看的代码不是优先考虑的,但它必须在“正常”时间内运行,而不是像现在它运行在10-15秒~。
下面是我的代码:
$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:不能只用一个查询就能让它工作,我已经走得更远了:
$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']);}我最终解决了它,只是我睡得太沉了,查询可以转换成只有一个查询,执行时间大大减少了。
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 https://stackoverflow.com/questions/38125140
复制相似问题