Recorrer los resultados de mysql_query

11675 visitas 6 respuestas

Hola amigos ...

Tengo un problema al recorrer los resultado de una consulta mysql, todos conoces la forma mas sencilla de hacerloque es:

while($rows = mysql_fetch_array($result)) { ....... }

pero esto no permite poner la condicion dentro el bucle de que si es el ultimo registro de la consulta hacer algo.

while($rows = mysql_fetch_array($result)) { if(Ultimo_Registro) echo "y este es el ultimo registro:"; echo rows[0] . ''; ....... }

Obviamente hay formas de hacer esto de manera muy forzada, pero me interesaria mucho saber como resolverian este problema de manera "optima", o colocar las distintas formas que existen para recorrer estos resultados

Muchas gracias de antemano la ayuda...

por desde Bolivia

Registrado desde: 30 Jan 09

Respuestas

0 0

Yo lo que haría es tener un contador e irlo comparando con lo que retorne mysql_num_rows()

por desde España

Registrado desde: 19 Jul 07
0 0

Creo que con la función end() se puede

<?php

$fruits = array('apple', 'banana', 'cranberry'); echo end($fruits); // cranberry

?>

En definitiva, lo que haces con esto

<? $rows = mysql_fetch_array($result); ?>

Es meter en el array $rows el resultado de la consulta, para ver el último elemento, bastaría con hacer

<? $rows = mysql_fetch_array($result); echo end($rows[0]); ?>

Donde cero "0" es el primer registro de la tabla que obtiene de la consulta. No se si estoy en lo correcto, tendría que probar, pero tiene mucho sentido no?

por desde Argentina

Registrado desde: 03 Feb 09
0 0

La propuesta de adesragno funciona si sólo quieres mostrar el último; es decir, sitúa el puntero en el último. Pero si lo que querías es recorrer todos y mostrarlos, e indicar que el último es el último, yo haría lo que dice Irozga, y además usaría una sola consulta de MySQL como la que nos mostró hace poco krowork. Algo así:

<?php $link = mysql_connect ('localhost', 'root', 'tuclave');

if (!$link){
    echo 'error al conectar';
    die;
}
$bd = mysql_select_db('nombrebase');
if (!$bd){
    echo 'error al seleccionar la base de datos';
    die;
}
mysql_query ("SET NAMES 'utf8'");//esta línea la añades sólo si usas utf8 como codificación de tu base y archivos.    

$sql = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM tabla where campo ...");//lanzo la consulta $mysqlnum =current( mysql_fetch_row( mysql_query("SELECT FOUND_ROWS()") ) );//a partir de la consulta averiguo el total $cont="1";//defino contador y establezco su valor a 1

while ($array=mysql_fetch_assoc($sql))
{
if ($cont == $mysqlnum){echo 'este es el último registro: '.$array['campo'].'</br>';} else {echo $array['campo'].'</br>';}//comparo el contador con el número total de $mysqlnum, y si coincide con el último, muestro el aviso y el dato; si no es así, sólo el dato
$cont++;//en cada iteración aumento en 1 el contador
}

?>

por desde España

Registrado desde: 04 Sep 07
0 0

Gracias a todos por sus repuestas resultaron bastante utiles.... la funcion end me parecio bastante interesante adesragno y nueva ademas..

Ahora con respecto a tu solucion de jurena esta bastante buena tambien hay funciones que no conocia, pero para hacerlo un poco mas simple la resumi de esta manera

$result = mysql_query("SELECT * FROM tabla where campo ...") or die(mysql_error());

$num_rows = mysql_num_rows($result);

$cont=1; while ($rows = mysql_fetch_array($result)) {

if ($cont == $num_rows) 
 { 
      echo 'este es el último registro: '. $rows['campo'].'</br>';
 } 
else 
{
   echo $array['campo'].'</br>';
 }

$cont++;   

}

Gracias por la ayuda recibida.... fue bastante educativa aprendi bastante, si alguien desea colocar algunas otras formas para recorrer estos resultados seria genial

por desde Bolivia

Registrado desde: 30 Jan 09
0 0

javkam, esa justamente es la que te recomendaba Irozga, por lo que las tres estrellas que asignaste a mi respuesta, deberían ser asignadas a la suya. saludos

por desde España

Registrado desde: 04 Sep 07
0 0

Bueno 2 estrellas para Irozga, le falto un ejemplo De nuevo gracias y espero estar mas activo en los foros

por desde Bolivia

Registrado desde: 30 Jan 09