Foros del Web » Programando para Internet » PHP »

entender como se muestran los resultados con el bucle while

Estas en el tema de entender como se muestran los resultados con el bucle while en el foro de PHP en Foros del Web. buenas, he conseguido resolver un problema que tenía al mostrar unos resultados que se lo explicaré posteriormente. Lo he resuelto sola, pero sin saber muy ...
  #1 (permalink)  
Antiguo 09/02/2012, 08:19
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 13 años, 6 meses
Puntos: 12
entender como se muestran los resultados con el bucle while

buenas, he conseguido resolver un problema que tenía al mostrar unos resultados que se lo explicaré posteriormente. Lo he resuelto sola, pero sin saber muy bien cómo y me gustaría que me explicasen el porqué.

Yo tenía el siguiente código para hacer una consulta y mostrar unos comentarios:
Código PHP:
$query_comentario "SELECT * FROM comentarios_noticias WHERE id_noticia='$recordID' ORDER BY 'ID_comentario' ASC";
$comentario mysql_query($query_comentario$conexion) or die (mysql_error());
$row_comentario mysql_fetch_assoc($comentario)?> 
ahora bien, si para mostrar los comentarios ponía:
Código PHP:
<? while($row_comentario mysql_fetch_assoc($comentario)){
[
código para crear un div con los resultados]
?>
me mostraba sólo a partir del segundo resultado, si sólo había un comentario nunca lo mostraba y si había dos sólo mostraba 1, etc.


el segundo caso intenté cambiarlo por el bucle do/while

Código PHP:
do{
[
código para crear div con los resultados]
}while(
$row_comentario mysql_fetch_assoc($comentario)) ?> 
en este caso siempre se mostraban correctamente todos los comentarios insertados, pero en las páginas que no había comentarios, me creaba el div con los contenidos genéricos, aunque luego estuviese vacío.

por último conseguí resolverlo poniendo el primer código así:
Código PHP:
$query_comentario "SELECT * FROM comentarios_noticias WHERE id_noticia='$recordID' ORDER BY 'ID_comentario' ASC";
$comentario mysql_query($query_comentario$conexion) or die (mysql_error()); 
es exactamente igual, pero quité esta fila


Código PHP:
$row_comentario mysql_fetch_assoc($comentario)?> 
entiendo más o menos la sintaxis del do/while y el while, lo que no entiendo es porque no mostraban el primer resultadoo creaban más resultados de los que había... obviamente es por la sentencia de $row_comentario = mysql_fetch_assoc($comentario), pero no entiendo porqué y me gustaría que me lo explicaran

gracias
  #2 (permalink)  
Antiguo 09/02/2012, 08:51
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: entender como se muestran los resultados con el bucle while

Ok, te explico, cuando haces mysql_fetch_assoc($comentario), en realidad lo que haces es leer el primer registro (0) y luego mueve el cabezal al registro siguiente.

Por lo tanto si vuelves a ejecutar mysql_fetch_assoc($comentario), leerás la posición 2 y nuevamente moveras el cabezal al registro siguiente, y así consecutivamente hasta llegar a la última posición que te dará un registro nulo.

En este ejemplo se entiende mejor:

Código PHP:
Ver original
  1. $row_comentario = mysql_fetch_assoc($comentario);
  2. //Lee posición 0 y mueve cabezal a 1
  3. while($row_comentario = mysql_fetch_assoc($comentario))
  4. //Lee posición 1 y mueve cabezal a 2, luego lee posición 2 y mueve cabezl a 3 y así hasta que termina

Por esto es que al principio no te mostraba la posición inicial

Al hacer un dowhile ocurre esto:

Código PHP:
Ver original
  1. $row_comentario = mysql_fetch_assoc($comentario);
  2. //Lee posición 0 y mueve cabezal a 1
  3. while($row_comentario = mysql_fetch_assoc($comentario))
  4. // muestras posición 0 aunque esté vacía
  5. //Lee posición 1 y mueve cabezal a 2, luego lee posición 2 y mueve cabezl a 3 y así hasta que termina

Por último la solución a la que llegaste es la más eficaz:

Código PHP:
Ver original
  1. while($row_comentario = mysql_fetch_assoc($comentario))
  2. //Lee posición 0 y mueve cabezal a 1, luego lee posición 1 y mueve cabezl a 2 y así hasta que termina

Espero que se haya entendido
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 09/02/2012, 09:01
 
Fecha de Ingreso: octubre-2011
Ubicación: Chile
Mensajes: 52
Antigüedad: 12 años, 6 meses
Puntos: 17
Respuesta: entender como se muestran los resultados con el bucle while

mysql_fetch_X (siendo X: row, assoc, object o array) "divide" la variable del resultado convirtiéndola en atributos.

Independientemente de si usas un bucle (sea cual sea, foreach - for - while - do - etc) lo que hace es transformar la variable que se imprimiría como Resource #X (Ya que imprime eso para demostrar que existen datos, pero que no se están mostrando correctamente) a una variable especifica y detallada

ej:
Asumiendo que tenemos una DB con comentarios, y esos comentarios están compuestos de id,nombre,texto por decir algo
y los llamamos con php y los dejamos dentro de un bucle cualquiera (como lo siguiente:)

Código PHP:
$sql mysql_query("mi sql");
while(
$resultado mysql_fetch_assoc($sql)) {
     echo 
'ID: ' $resultado['id'] . '<br />';
     echo 
'Nombre: ' $resultado['nombre'] . '<br />';
     echo 
'Texto: ' $resultado['texto'] . '<br />';

Lo que pasa aquí es que primero, llamas los datos con _query,
luego "divides" los datos del resultado de la siguiente forma:

(asumiendo que son 3 comentarios)

$resultado[0] es id, nombre, texto para el primer caso,
se podria imprimir:
$resultado[0]['id'], $resultado[0]['nombre'], $resultado[0]['texto'],

asi mismo con los siguientes:
$resultado[1]
$resultado[2]

Lo que hace while (o cualquier bucle) es pasar por cada uno de esos [0],[1],[2] y transformarlos a:
$resultado['id'], ya que en cada uno de los "ciclos" por los que pasa, se refiere a la posición actual que tiene.

El bucle es irrelevante mientras sepas usarlo para que pase por cada uno de los ciclos que quieras, se diferencian dependiendo de si quieres hacer algo especial con ellos. tienen sus ventajas, pero no es necesario siempre el mismo

un foreach podria ser de la misma utilidad,
seria:

Código PHP:
foreach($resultados as $comentario) {
     echo 
$comentario['id'];

y seria lo mismo
__________________
No respondo mensajes privados, pregunte por foro como todos los mortales.

Etiquetas: bucle, entender, muestran, mysql, resultados
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 01:01.