Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/06/2009, 11:35
Avatar de dggluz
dggluz
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Problema con consulta a SQL Server

Con gusto... es un método de un objeto que uso. El código está un tanto desrpolijo porque lo fui modificando sobre la marcha, pero suelo usar siempre el mismo. Y lo de sql_coteo lo podría solucionar mejor con un mssql_num_rows (aclaro porque me da un tanto de vergüenza postear este código)...

Código PHP:
    function & buscarTodo ($fechaDesde$fechaHasta$arrLocales$arrTurnos$arrRubros$arrSubrubros$arrNrocli$arrTipof$arrNrof$orden, &$cantPaginas$pagina$sentido_registro)
    {
        
$sql="FROM OPENROWSET('SQLOLEDB', '".$this->const->DB_SERVER."'; '".$this->const->DB_USER."'; '".$this->const->DB_PASSWORD."','SELECT * FROM CEP.dbo.Locales') AS remota";
        
$sql .= " INNER JOIN ".$this->const->INFOCOMERCIAL." INNER JOIN rubros ON ".$this->const->INFOCOMERCIAL.".".$this->const->INFOCOMERCIAL_RUBRO."=rubros.id INNER JOIN subrubros ON subrubros.id = ".$this->const->INFOCOMERCIAL.".".$this->const->INFOCOMERCIAL_SUBRUBRO." ON remota.lcl_id = ".$this->const->INFOCOMERCIAL.".".$this->const->INFOCOMERCIAL_LOCAL;
        
$claus " WHERE (id_registro = id_registro";
        
// LAS RESTRICCIONES DE BÚSQUEDA SE AGREGAN SÓLO SI NO VIENEN VACÍAS.
        
if ($fechaDesde!="")
        {
            
$claus $claus." and fecha>= '".str_replace("/","-",$fechaDesde)."'";
        }
        if (
$fechaHasta!="")
        {
            
$claus $claus." and fecha<= '".str_replace("/","-",$fechaHasta)."'";
        }
        
        if(
$arrLocales!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrLocales)-1;$i++)
            {
                
$cadAux.="local=".$arrLocales[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                
        if(
$arrTurnos!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrTurnos)-1;$i++)
            {
                
$cadAux.="turno=".$arrTurnos[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                
        if(
$arrRubros!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrRubros)-1;$i++)
            {
                
$cadAux.="rubro=".$arrRubros[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                
        if(
$arrSubrubros!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrSubrubros)-1;$i++)
            {
                
$cadAux.="subrubro=".$arrSubrubros[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                

        if(
$arrNrocli!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrNrocli)-1;$i++)
            {
                
$cadAux.="nrocli=".$arrNrocli[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                

        if(
$arrTipof!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrTipof)-1;$i++)
            {
                
$cadAux.="tipof=".$arrTipof[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
                
        if(
$arrNrof!="")
        {
            
$cadAux="";
            for(
$i=0;$i<count($arrNrof)-1;$i++)
            {
                
$cadAux.="numerof=".$arrNrof[$i]." OR ";
            }
            if(
$cadAux!="")
            {
                
$cadAux=substr($cadAux,0,strlen($cadAux)-4);
                
$claus.=" AND (".$cadAux.")";
            }
        }
        
// FIN DE RESTRICCIONES DE BÚSQUEDA
        
$claus .= ")";
        
$sql=$sql.$claus;

        
// $sql_conteo ES LA SENTENCIA SQL PARA AVERIGÜAR EL TOTAL DE FILAS DEL RESULTADO DE BÚSQUEDA
        // LA SENTENCIA SE GENERA A PARTIR DE LA SENTENCIA SQL PARCIAL ANTES GENERADA
        
$sql_conteo "SELECT COUNT(*) AS cantid_registroad ".$sql;
//        echo "<br />SENTENCIA DE CONTEO SQL: ".$sql_conteo."<br />";
        // SE MANDA A EJECUTAR LA SENTENCIA $sql_conteo
        
$rs=$this->buscar($sql_conteo);
        
$f=$rs->dameFila();
        
$cantPaginas=(int)(($f["cantid_registroad"]-1)/$this->const->RESULTADOS_POR_PAGINA)+1;
        if(
$sentido_registro=="")
        {
            
$sentido_registro="ASC";
        }

        if (
$sentido_registro=="ASC")
        {
            
$no_sentido_registro="DESC";
        }
        else
        {
            
$no_sentido_registro="ASC";
        }
        
$sql $sql." ORDER BY ".$orden;
        if (
$sentido_registro != "")
        {
            
$sql.=" ".$sentido_registro;
        }
        if(
$pagina==0)
        {
            
$pagina=1;
        }

        
$posta="SELECT * FROM (SELECT TOP (".($this->const->RESULTADOS_POR_PAGINA).") * FROM (SELECT TOP (".($pagina*$this->const->RESULTADOS_POR_PAGINA).") ".$this->const->INFOCOMERCIAL.".*, rubros.descripcion AS rubros, subrubros.descripcion AS subrubros, remota.lcl_descripcion ".$sql.") AS derivedtbl_1 ORDER BY ".$orden." ".$no_sentido_registro.") AS derivedtbl_2 ORDER BY ".$orden." ".$sentido_registro.";";
        echo 
$posta;
        return 
$this->buscar($posta);
    } 
¡Gracias por responder!