Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Hacer dos consultas mysql seguidas en php

Estas en el tema de Hacer dos consultas mysql seguidas en php en el foro de PHP en Foros del Web. Hola a todos, tengo un código de una consulta mysql que funciona perfectamente en phpmyadmin, es la siguiente: Código: SET @numero=0; select @numero:=@numero+1 AS `posicion`, ...
  #1 (permalink)  
Antiguo 18/12/2015, 07:27
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Hacer dos consultas mysql seguidas en php

Hola a todos, tengo un código de una consulta mysql que funciona perfectamente en phpmyadmin, es la siguiente:

Código:
SET @numero=0;
select @numero:=@numero+1 AS `posicion`, tot.idpiloto, tot.nombre_piloto, tot.temporadas, tot.puntos puntos, tot.coi, tot.moe , tot.mt mt, round((puntos/mt), 2) media_puntos, tot.victorias, tot.podiums, tot.vr, tot.pm, tot.mp, tot.pp, tot.primero, tot.segundo, tot.tercero from
(
SELECT idpiloto, nombre_piloto, count(idtemporada) temporadas, sum(puntos) puntos, sum(coi) coi, sum(moe) moe, sum(mt) mt, sum(victorias) victorias, sum(podiums) podiums, sum(vr) vr, round(avg(pm)) pm, min(mp) mp, max(pp) pp, sum(primero) primero, sum(segundo) segundo, sum(tercero) tercero
from resultados
group by idpiloto
order by sum(puntos) desc, sum(victorias) desc)tot
La primera linea me pone el contador a 0 y luego, a partir de la segunda línea, me genera una lista de clasificación numerada.

El problema lo tengo al pasar a php. Tengo el siguiente código y solo me funciona bien si quito la primera linea de mysql (SET @numero=0;) pero claro, al quitar la primera linea, no me numera las filas.

Código PHP:
<?php


$sConsulta 
= <<<CONSULTA
SET @numero=0;
select @numero:=@numero+1 AS `posicion`, tot.idpiloto, tot.nombre_piloto, tot.temporadas, tot.puntos puntos, tot.coi, tot.moe , tot.mt mt, round((puntos/mt), 2) media_puntos, tot.victorias, tot.podiums, tot.vr, tot.pm, tot.mp, tot.pp, tot.primero, tot.segundo, tot.tercero from
(
SELECT idpiloto, nombre_piloto, count(idtemporada) temporadas, sum(puntos) puntos, sum(coi) coi, sum(moe) moe, sum(mt) mt, sum(victorias) victorias, sum(podiums) podiums, sum(vr) vr, round(avg(pm)) pm, min(mp) mp, max(pp) pp, sum(primero) primero, sum(segundo) segundo, sum(tercero) tercero
from resultados
group by idpiloto
order by sum(puntos) desc, sum(victorias) desc)tot
CONSULTA;
require (
'../../conexion_base_datos/datos_conexion.php');
$conexion = new mysqli($hostname$username$password$database);
if (
$conexion == FALSE){
echo(
'Error en la conexión.');
exit();
}

$resultado $conexion->query($sConsulta);
if(
$resultado == FALSE){
echo(
'Error en la consulta.');
echo(
$conexion->error);
exit();
}

        echo 
'<div class="seccion3" style="width: 1000px; margin-left: 5%;">';
        echo 
'<table style="text-align: center;"><tr>';
        echo 
'<td width="50px">Pos.</td>';
        echo 
'<td width="200px">Piloto</td>';
        echo 
'<td width="50px">Temp.</td>';
        echo 
'<td width="80px">Puntos</td>';        
        echo 
'<td width="50px">C.O.I.</td>';
        echo 
'<td width="50px">M.O.E.</td>';
        echo 
'<td width="50px">M.T.</td>';
        echo 
'<td width="50px">Media Ptos.</td>';
        echo 
'<td width="50px">Vict.</td>';
        echo 
'<td width="50px">Pod.</td>';
        echo 
'<td width="50px">V.R.</td>';
        echo 
'<td width="50px">P.M.</td>';
        echo 
'<td width="50px">M.P.</td>';
        echo 
'<td width="50px">P.P.</td>';
        echo 
'<td width="50px">1º</td>';
        echo 
'<td width="50px">2º</td>';
        echo 
'<td width="50px">3º</td></tr>';
        
            while(
$registro mysqli_fetch_assoc($resultado)){
                
            echo 
'<tr class="tr_estadisticas">';
            echo 
'<td> </td>';
            echo 
'<td style="text-align: left; padding-left: 5px;">'.$registro['nombre_piloto'].'</td>';
            echo 
'<td>'.$registro['temporadas'].'</td>';
            echo 
'<td>'.$registro['puntos'].'</td>';
            echo 
'<td>'.$registro['coi'].'</td>';
            echo 
'<td>'.$registro['moe'].'</td>';
            echo 
'<td>'.$registro['mt'].'</td>';
            echo 
'<td>'.$registro['media_puntos'].'</td>';
            echo 
'<td>'.$registro['victorias'].'</td>';
            echo 
'<td>'.$registro['podiums'].'</td>';
            echo 
'<td>'.$registro['vr'].'</td>';
            echo 
'<td>'.$registro['pm'].'</td>';
            echo 
'<td>'.$registro['mp'].'</td>';
            echo 
'<td>'.$registro['pp'].'</td>';
            echo 
'<td>'.$registro['primero'].'</td>';
            echo 
'<td>'.$registro['segundo'].'</td>';
            echo 
'<td>'.$registro['tercero'].'</td></tr>';
                
            }
        echo 
'</table>';
        echo 
'</div>';
        
$conexion->close();


?>
Este es el error que me da:
Cita:
Error en la consulta.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select @numero:=@numero+1 AS `posicion`, tot.idpiloto, tot.nombre_piloto, tot.te' at line 2
¿Qué hago mal?

Un saludo
  #2 (permalink)  
Antiguo 18/12/2015, 07:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Hacer dos consultas mysql seguidas en php

Técnicamente, no hay errrores, salvo que estás poniendo dos sentencias y no una. Eso, sin contar con que no parece un script correctamente escrito en PHP... La parte de SQL no sé si fujcionará de esa forma.

Código MySQL:
Ver original
  1.     @numero:=@numero + 1 AS `posicion`,
  2.     tot.idpiloto,
  3.     tot.nombre_piloto,
  4.     tot.temporadas,
  5.     tot.puntos puntos,
  6.     tot.coi,
  7.     tot.moe,
  8.     tot.mt mt,
  9.     ROUND((puntos / mt), 2) media_puntos,
  10.     tot.victorias,
  11.     tot.podiums,
  12.     tot.vr,
  13.     tot.pm,
  14.     tot.mp,
  15.     tot.pp,
  16.     tot.primero,
  17.     tot.segundo,
  18.     tot.tercero
  19.     (SELECT
  20.         idpiloto,
  21.             nombre_piloto,
  22.             COUNT(idtemporada) temporadas,
  23.             SUM(puntos) puntos,
  24.             SUM(coi) coi,
  25.             SUM(moe) moe,
  26.             SUM(mt) mt,
  27.             SUM(victorias) victorias,
  28.             SUM(podiums) podiums,
  29.             SUM(vr) vr,
  30.             ROUND(AVG(pm)) pm,
  31.             MIN(mp) mp,
  32.             MAX(pp) pp,
  33.             SUM(primero) primero,
  34.             SUM(segundo) segundo,
  35.             SUM(tercero) tercero
  36.     FROM
  37.         resultados JOIN (SELECT @numero:=0) T1 -- Pongamoslo aca, y evitamos el SET
  38.     GROUP BY idpiloto
  39.     ORDER BY SUM(puntos) DESC , SUM(victorias) DESC) tot
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/12/2015, 08:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Hacer dos consultas mysql seguidas en php

Solucionado, muchas gracias...y aprendido también a escribir correctamente el script en php.

Gracias de nuevo.

Etiquetas: mysql, registro, select, sql
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 12:47.