Foros del Web » Programando para Internet » PHP »

¿Repetir el mysql_fetch_assoc($result)?

Estas en el tema de ¿Repetir el mysql_fetch_assoc($result)? en el foro de PHP en Foros del Web. Buenas soy un poco novato en php y me di cuenta que repito varias veces la funcion "$row = mysql_fetch_assoc($result);" Os pongo el codigo y ...
  #1 (permalink)  
Antiguo 21/10/2005, 03:49
 
Fecha de Ingreso: octubre-2005
Mensajes: 132
Antigüedad: 12 años, 1 mes
Puntos: 1
¿Repetir el mysql_fetch_assoc($result)?

Buenas soy un poco novato en php y me di cuenta que repito varias veces la funcion "$row = mysql_fetch_assoc($result);"


Os pongo el codigo y asi vereis a lo que me refiero :

Código PHP:


//mirar en que archipielago estoy
    
$sql "SELECT edificios.tiempo,  edificios.descripcion,  edificios.id as idedificio, islas_edificios.nivel, recetas_edificios.cantidad, edificios.nombre, islas_edificios.nivel, recursos_primarios.recurso";
    
$sql $sql ." FROM (recetas_edificios INNER JOIN recursos_primarios ON recetas_edificios.id_recurso_primarios = recursos_primarios.Id) INNER JOIN (islas_edificios INNER JOIN edificios ON islas_edificios.id_edificio = edificios.Id) ON recetas_edificios.id_edificio = edificios.Id    ";
    
$sql $sql" WHERE islas_edificios.id_isla = " .$_SESSION['idisla']." and edificios.id = ".$_GET['id']."";

    
//crear recordset
    
$result mysql_query ($sql);
    
//comprobar select correcto
    
if (!$result){
        echo(
'Query failed: ' mysql_error());
        exit;
    }
    
    
//asociar filas al resultado y mostrar todas las islas del archipielago
    
$row mysql_fetch_assoc($result);    
    
    
$nivel $row['nivel'];
    
    echo 
"<b>Edificio</b> : "$row['nombre']." (Nivel ".$nivel.")<br>";
    echo 
"<b>Tiempo Crear Edificio</b> : "$row['tiempo'] * ($nivel 1)." seg.<br>";
    echo 
"<b>Descripción</b> : "$row['descripcion']."<br><br>";    
    
    
$id_edificio $row['idedificio'];
    
    echo 
"<b>Materiales subir nuevo nivel.</b><br><br>";    
    
$result mysql_query ($sql);
    while (
$row mysql_fetch_assoc($result)){
        echo 
$row['recurso']." - Cantidad: ".$row['cantidad'] * ($nivel 1)."<br>";
    } 

Si os dais cuenta pongo dos veces el mysql_fetch_assoc($result) , una para mostrar unos datos y otro para hacer el bucle.

¿Esta bien hecho esto? ¿No habria forma de que pueda volver a ver los datos sin tener que recargar el row?.

Venga un saludo.
  #2 (permalink)  
Antiguo 21/10/2005, 09:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si .. haces dos veces una consulta igual ...

Si tu necesitas obtener cierta "cabecera" de ese listado que no se repita puedes usar un condicional para ver si ya pusistes esa cabecera o no (útil también para realizar listados cuando cambie por ejemplo tu Edificio y así agrupar listados por ejemplo ...)


Código PHP:
    $nombre='';         
    
$result mysql_query ($sql); 
    while (
$row mysql_fetch_assoc($result)){ 
      if (
$row['nombre'] != $nombre){
         echo 
"<b>Edificio</b> : "$row['nombre']." (Nivel ".$nivel.")<br>"
         echo 
"<b>Tiempo Crear Edificio</b> : "$row['tiempo'] * ($nivel 1)." eg.<br>"
        echo 
"<b>Descripción</b> : "$row['descripcion']."<br><br>";     
    } 
        
$nombre $row['nombre'];
        echo 
"<b>Materiales subir nuevo nivel.</b><br><br>";
        echo 
$row['recurso']." - Cantidad: ".$row['cantidad'] * ($nivel 1)."<br>"
    } 
Para que esta técnica funcione correctamente es necesario que se ordene el resultado de tu consulta por el campo que vas a usar como "agrupador" para definir esa "cabecera".
Código PHP:
//mirar en que archipielago estoy 
    
$sql "SELECT edificios.tiempo,  edificios.descripcion,  edificios.id as idedificio, islas_edificios.nivel, recetas_edificios.cantidad, edificios.nombre, islas_edificios.nivel, recursos_primarios.recurso"
    
$sql $sql ." FROM (recetas_edificios INNER JOIN recursos_primarios ON recetas_edificios.id_recurso_primarios = recursos_primarios.Id) INNER JOIN (islas_edificios INNER JOIN edificios ON islas_edificios.id_edificio = edificios.Id) ON recetas_edificios.id_edificio = edificios.Id    "
    
$sql $sql" WHERE islas_edificios.id_isla = " .$_SESSION['idisla']." and edificios.id = ".$_GET['id']." ORDER by edificios.nombre"

Un saludo,
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




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