Foros del Web » Programando para Internet » PHP »

do while dentro de otro dowhile?

Estas en el tema de do while dentro de otro dowhile? en el foro de PHP en Foros del Web. hola, tengo entendido que si se puede poner un do while dentro de otro, pero no me funciona, el do while de adentro se queda ...
  #1 (permalink)  
Antiguo 01/12/2011, 19:44
 
Fecha de Ingreso: diciembre-2011
Ubicación: Chile
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Pregunta do while dentro de otro dowhile?

hola, tengo entendido que si se puede poner un do while dentro de otro, pero no me funciona, el do while de adentro se queda en infinito y a los 30 seg la pagina arroja error de timeout

este el es code

Código PHP:
<?php 
include("../funciones/config.php"); // aca estan los adtos del servidor, funciona correctamente

mysql_select_db($database$volcan_conecta);
$query_Consulta_categorias_top "SELECT * FROM tblcategorias WHERE strArquitectos='on' and idTipo='Productos' ORDER BY strTitulo ASC";
$Consulta_categorias_top mysql_query($query_Consulta_categorias_top$volcan_conecta) or die(mysql_error());
$row_Consulta_categorias_top mysql_fetch_assoc($Consulta_categorias_top);
$totalRows_Consulta_categorias_top mysql_num_rows($Consulta_categorias_top);


?>

//aca el extracto del script que no me funciona

<div id="smoothmenu1" class="ddsmoothmenu">
<ul>
<!--INICIO BOTON-->
<li><a href="index.php">INICIO</a></li>
<!--FIN BOTON-->
<!--INICIO BOTON-->
<li><a href="productos.php">PRODUCTOS</a>
<ul>
<?php do {// primer do while, repite las categorias?>
<li><a href="categoria_producto.php?Categoria=<?php echo $row_Consulta_categorias_top['idCategoria']; ?>"><?php echo $row_Consulta_categorias_top['strTitulo']; ?></a>
<ul>
<?php do { // segundo do while, asocia los productos a las categorias comparandoque el id de la categoria corresponda al seteado del producto
mysql_select_db($database$volcan_conecta);
$query_Consulta_productos_top "SELECT * FROM tblproductos WHERE strArquitectos='on' AND idCategoria='".$row_Consulta_categorias_top['idCategoria']."' ORDER BY strNombre ASC";
$Consulta_productos_top mysql_query($query_Consulta_productos_top$volcan_conecta) or die(mysql_error());
$row_Consulta_productos_top mysql_fetch_assoc($Consulta_productos_top);
$totalRows_Consulta_productos_top mysql_num_rows($Consulta_productos_top); ?>
<li><a href="producto.php?Producto=<?php echo $row_Consulta_productos_top['idProducto'];?>"><?php echo $row_Consulta_productos_top['strNombre'];?></a></li>
<?php } while ($row_Consulta_productos_top mysql_fetch_assoc($Consulta_productos_top));// fin segundo do while ?>
</ul>
</li>
<?php } while ($row_Consulta_categorias_top mysql_fetch_assoc($Consulta_categorias_top));// fin primer do while ?>
</ul>
</li>
//.. resto del menu ( el resto es estatico)
Se supone, que lo que debe hacer es, en el primer do while buscar las categorias que existan en la DB que cumplan algunas condiciones , ejemplo: que el idTipo sea "productos" y que el strArquitectos este en "on", con esa lista de categorias debe ponerlas en pantalla ( el nombre de categoria (strTitulo) y un link a la pagina categorias.php mandando el ID (idCategoria) por GET, Luego, dependiendo de la categoria mostrada, el segundo Do while debe consultar de nuevo a la DB para extraer los productos que esten asociadas a esa categoria, cuando ya no queden mas productos de esa categoria, deberia poner en pantalla la segunda categoria con sus respectivos productos, y asi repetir hasta que se acaben las consultas

onda asi:

categoria1
-- producto1
-- producto2
categoria2
--producto3
--producto4

etc

pero me muestra la primera categoria, con el primer producto y luego hace un infinito con ese producto:

categoria1
--producto 1
--producto 1
--producto 1
--producto 1
--producto 1
--producto 1
... y se repite hasta el Timeout del servidor

ojala puedan echarme una mano, llevo 2 dias atorado en eso, y esta estructura de consulta la tengo que repetir en varias partes del sitio.

soy mas o menos nuevo en php, asi que disculpen si no me explique bien o me falto poner algo mas.

saludos
  #2 (permalink)  
Antiguo 01/12/2011, 20:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: do while dentro de otro dowhile?

Lo que pasa es que tienes otra consulta dentro de ese while.

Más o menos tendría que ser así (pseudo-código):
Código:
consulta1 = mysql_query(bla bla bla);
while(variable1 = mysql_fetch_assoc(consulta1)) {
    echo de las variables que se tengan que mostrar
    // La nueva consulta debe estar fuera del siguiente while
    consulta2 = mysql_query(bla bla bla);
    while(variable2 = mysql_fetch_assoc(consulta2)) {
         echo de las variables que se tengan que mostrar
    }
}
Nota: No me gusta do { } while(); prefiero directamente while() { }, con esto te ahorras una línea de mysql_fetch_assoc()

Por cierto, mysql_select_db() sólo es necesario cuando necesitas seleccionar o cambiar la base de datos con la que estás trabajando, generalmente viene después de la conexión y no vuelves a usarlo.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 01/12/2011, 21:01
 
Fecha de Ingreso: diciembre-2011
Ubicación: Chile
Mensajes: 36
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: do while dentro de otro dowhile?

ok , voy a probar,
lo de usar do while, es porque entiendo que es más rapido que el while.

saludos y les cuento...
  #4 (permalink)  
Antiguo 01/12/2011, 23:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: do while dentro de otro dowhile?

Es posible que un do-while sea más rápido que while, pero, tampoco es algo que vaya a mejorar considerablemente el tiempo de carga de una página, a menos que estés hablando de muchas iteraciones, ejemplo: http://www.rswr.net/2008/05/21/php-d...us-while-loop/

Por otra parte, creo que el hecho de tener que usar un $variable = mysql_fetch_assoc($consulta); antes de ingresar al ciclo podría consumir esa poca ganancia de tiempo a la hora de mostrar los resultados y, además, tendrías que agregar un if para evitar mensajes de error en caso de que la consulta devuelva cero filas y, por tanto, $variable sería false, en lugar de array asociativo.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 02/12/2011, 00:18
Avatar de ocesitaro  
Fecha de Ingreso: diciembre-2011
Ubicación: Carabayllo
Mensajes: 274
Antigüedad: 12 años, 11 meses
Puntos: 36
Respuesta: do while dentro de otro dowhile?

el do while primero ejecuta y luego compara, puede pasarse una informacion , seria conveninete trabjar con while tal como plantea Triby, para comparar y leugo pasar
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:18.