Foros del Web » Programando para Internet » PHP »

Problema con consulta a SQL Server

Estas en el tema de Problema con consulta a SQL Server en el foro de PHP en Foros del Web. Gente: sepan disculparme, hasta último momentó dudé de si postar en este subforo o en el de SQL Server. Tengo un problema y básicamente es ...
  #1 (permalink)  
Antiguo 11/06/2009, 11:19
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Pregunta Problema con consulta a SQL Server

Gente: sepan disculparme, hasta último momentó dudé de si postar en este subforo o en el de SQL Server.

Tengo un problema y básicamente es que una consulta SQL que hago no me devuelve nada cuando la ejecuto desde PHP (mssql_query); pero cuando la ejecuto desde Microsoft SQL Server Management Studio, la consulta devuelve lo que esperaba. Acá va la consulta:

Código:
SELECT * FROM
    (SELECT TOP (10) * FROM
        (SELECT TOP (10) infocomercial.*,
            rubros.descripcion AS rubros,
            subrubros.descripcion AS subrubros,
            remota.lcl_descripcion
                FROM OPENROWSET('SQLOLEDB',  'host'; 'user'; 'password',
                    'SELECT * FROM CEP.dbo.Locales') AS remota
                        INNER JOIN infocomercial
                            INNER JOIN rubros ON infocomercial.rubro=rubros.id 
                            INNER JOIN subrubros ON subrubros.id = infocomercial.subrubro
                        ON remota.lcl_id = infocomercial.local
                        WHERE (id_registro = id_registro)
                        ORDER BY id_registro ASC) AS derivedtbl_1
                    ORDER BY id_registro DESC) AS derivedtbl_2
               ORDER BY id_registro ASC;
Aclaración: los order by con los sentidos cruzados y los TOP (10), están para paginar el resultado... lo mismo que en MySQL es un simple LIMIT, pero en SQL server no existe...

¿Alguna idea?

¡Desde ya muchas gracias!
  #2 (permalink)  
Antiguo 11/06/2009, 11:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problema con consulta a SQL Server

Podrias escribir el codigo como lo usas en el PHP?
  #3 (permalink)  
Antiguo 11/06/2009, 11:35
Avatar de 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!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:13.