Foros del Web » Programando para Internet » PHP »

"do while" dentro de "do while"

Estas en el tema de "do while" dentro de "do while" en el foro de PHP en Foros del Web. Es posible introducir un "do while" dentro de otro "do while"? Más o menos sería una estructura así <?php do { ?> <?php do { ...
  #1 (permalink)  
Antiguo 10/06/2010, 09:19
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 0
"do while" dentro de "do while"

Es posible introducir un "do while" dentro de otro "do while"?

Más o menos sería una estructura así

<?php do { ?>
<?php do {
if ($row_ClasTerr12b['idequipo'] == $row_territorial['idequipo']) {
$descienden = $descienden - 1;
}
} while ($row_ClasTerr12b = mysql_fetch_assoc($ClasTerr12b));?>
<?php } while ($row_territorial = mysql_fetch_assoc($territorial)); ?>

No me funciona y no se por qué...

Gracias
  #2 (permalink)  
Antiguo 10/06/2010, 09:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: "do while" dentro de "do while"

pues si se puede...

tu estructura es correcta, quizá el problema lo tienes en otra parte...

¿porque dices que no funciona? ¿tienes activado el reporte de errores??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/06/2010, 09:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: "do while" dentro de "do while"

Yo se que existe un dato con el que coincide y debería restar uno a los que descienden. Pero luego no lo plasma en pantalla. Te pongo en situación.......

Una tabla es de una clasificación de unos equipos y la otra es de los cinco últimos clasificados de la liga superior. Deben descender 3, pero puede haber una variante, y es que en la liga exista un equipo filial de un equipo que desciende. Entonces en la liga inferior ese equipo está el 10 de 16 y no debería descender, pero como es filial y su primer equipo desciende el pierde la categoría directamente. De esta forma ya no descienden los tres últimos sino los dos últimos más este filial. Y no hace bien esa operación. Saludos y gracias por la respuesta.
  #4 (permalink)  
Antiguo 10/06/2010, 10:00
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: "do while" dentro de "do while"

es un error de lógica, mira la cosa está así... mysql_fetch_assoc trabaja en el resultado de una consulta con mysql_query, internamente va escalonando filas de resultados de una en una, llegando al final ya no genera más resultados, por tanto, el do...while interno solo hace el ciclo una vez mientras que el do...while externo lo hace de la misma forma... el resultado... solo se compara el primer resultado del do...while externo una vez.

sugerencia, pasa el resultado de las dos querys en un array e intenta de nuevo haciendo las comparaciones en los arrays resultantes.
  #5 (permalink)  
Antiguo 10/06/2010, 10:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: "do while" dentro de "do while"

No puedo decirle que vuelva al registro uno una vez termine ese while, para que la próxima vez que pase por ahí, vuelva a generar la consulta?
  #6 (permalink)  
Antiguo 10/06/2010, 10:07
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: "do while" dentro de "do while"

en otros lenguajes de programación tu mueves el puntero, pero en estas funciones mysql_fetch_assoc no. necesitas vaciar la consulta de tu do...while interno a un array y de ahí compararlo en tu do...while externo.

adicionalmente, el uso de do...while en este caso no es lo mejor, un while normal es lo ideal.
  #7 (permalink)  
Antiguo 10/06/2010, 10:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: "do while" dentro de "do while"

Revisa la función mysql_data_seek:
http://www.php.net/manual/es/functio...-data-seek.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 10/06/2010, 10:10
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: "do while" dentro de "do while"

yo lo hubiera hecho así:

Código PHP:
Ver original
  1. $interno=array();
  2. while($row_ClasTerr12b=mysql_fetch_assoc($ClasTerr12b)){
  3.     $interno[]=$row_ClasTerr12b['idequipo'];
  4. }
  5.  
  6. while($row_territorial=mysql_fetch_assoc($territorial)){
  7.     if(in_array($row_territorial['idequipo'],$interno)){
  8.         $descienden--;
  9.     }
  10. }
  #9 (permalink)  
Antiguo 10/06/2010, 10:16
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: "do while" dentro de "do while"

Pero es que yo no puedo compararlo con un solo equipo, debo compararlo con cada uno de los equipos de la tabla, para que esté en la posición que esté lo pinte de rojo y reste uno a los descendidos. Te mando el enlace de la web. La posición 10 debería estar toda en rojo y solo sale el número y porque yo lo he puesto a mano. De ahí que deba meter el do...while dentro del do...while.

http://www.clubfronteniscatarroja.com/cla_DHCas.php?liga=División Honor - Castellón
  #10 (permalink)  
Antiguo 10/06/2010, 10:25
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: "do while" dentro de "do while"

el uso del do...while no es la forma correcta para usarlo en este tipo de casos, el do...while hace la condición al final, por tanto, hace un primer ciclo donde el arreglo está vació, pues en este caso la condición es la que crea el arreglo. adicionalmente, tu código abres y cierras las etiquetas PHP sin sentido. el código que te deje en el post #8 es lo que hace exactamente tu código, pero funcionando, claro, si necesitas hacer más comprobaciones solo tienes que ingresar el array completo o usar la función que el colega David menciona (que por cierto no conocía :-|) y que de usarla el ciclo interno debería ser un for en lugar de un do...while o un while.
  #11 (permalink)  
Antiguo 10/06/2010, 10:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 14 años
Puntos: 6
Respuesta: "do while" dentro de "do while"

Prueba sustituyendo las comillas simples por comillas dobles.
  #12 (permalink)  
Antiguo 10/06/2010, 10:52
 
Fecha de Ingreso: octubre-2009
Mensajes: 45
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: "do while" dentro de "do while"

Solucionado, Muchísimas gracias!!!!!! No soy informático y me ha constado ingresar el mysql_data_seek. Pero ya está solucionado. Muchísimas gracias a los dos. Un saludo muy grande y os debo una...................

Etiquetas: Ninguno
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 16:42.