Foros del Web » Programando para Internet » PHP »

Bucle dentro de bucle?

Estas en el tema de Bucle dentro de bucle? en el foro de PHP en Foros del Web. Puede sonar tonta la consulta pero me trabé y no lo puedo resolver ... Tengo que armar una página de links ... éstos están categorizados ...
  #1 (permalink)  
Antiguo 20/12/2006, 15:26
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 19 años, 2 meses
Puntos: 1
Desacuerdo Bucle dentro de bucle?

Puede sonar tonta la consulta pero me trabé y no lo puedo resolver ...
Tengo que armar una página de links ... éstos están categorizados ... y la idea es que me muestre cada categoría con sus correspondientes links ... todo esto en una sola página ...
Las categorías las traigo e imprimo con un while ... pero quiero que me quede el nombre de la categoría como header y por debajo el listado de links correspondientes ... y a continuación la siguiente categoría ...
Obvio no funciona con GROUP BY ... ya que ahí me muestra el primer registro de esa categoría ... probé hacer un bucle para las categorías y dentro del bucle un bucle con los links correspondientes a esa categoría pero ... jeje ... me colapsó el Apache ... pego el código para que se vea que es lo que NO se debe hacer ...

Código PHP:
$c mysql_query("select link_cat_id, link_cat_nombre from links_cat order by link_cat_nombre");
while (
$cat mysql_fetch_array($c)) {
echo 
"$cat[link_cat_nombre]";
$l mysql_query("select link_id, link_nombre, link_url from links where link_cat='$cat[link_cat_id]' order by link nombre");
while (
$li mysql_fetch_array($l)) {
echo 
"$li[link_nombre]";
}

Por favor si hay modo de hacer esto les estaría muy agradecido ...
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE

Última edición por jpvilar; 20/12/2006 a las 17:51
  #2 (permalink)  
Antiguo 20/12/2006, 17:36
 
Fecha de Ingreso: junio-2006
Mensajes: 25
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Bucle dentro de bucle?

oye yo no soy muy bueno en PHP, pero creo que esto no se puede hacer:


$c = mysql_query("select link_cat_id, link_cat_nombre from links_cat where order by link_cat_nombre");


tu consulta la haces con un where (donde)

pero no validas nada, es decir, selecciona link_cat_id y link_cat_nombre "donde" ????

no se si me explico, pero creo que puedes quitarle ese where a tu primer consulta o en su defecto validar o comparar ese where con algo.
  #3 (permalink)  
Antiguo 20/12/2006, 18:16
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Bucle dentro de bucle?

Gracias astryan ... en realidad ese where en particular es un error de tipeo ... ya lo corregí ... en mi código en desarrollo no estaba ... pasa cuando no "copiás y pegas" y "copiás y tipeas" ... gracias igual
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #4 (permalink)  
Antiguo 20/12/2006, 19:51
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Re: Bucle dentro de bucle?

Bueno, no se como sea la estructura de tus tablas en tu bd, pero te doy una idea:

Tabla: categorias
id nombre_cat
1 amigos
2 familia
3 conocidos
4 foreros

Tabla: links
id id_cat link
1 2 gmail.html
2 1 hotmail.html
3 4 google.html
4 1 miweb.php

Segun veo tienes que extraer primeramente esa informacion de las categorias con una consulta tipo:

Código PHP:
//seleccionamos y ordenamos en forma ascendente
$consulta mysql_query("select * from categorias order by id asc");
while(
$datos mysql_fetch_assoc($consulta)){
echo 
"<b>- ".$datos["nombre_cat"]."</b><br>";
//ahora vamos a extraer los links correspondientes a esta categoria
    
$consulta2 mysql_query("select * from links where id_cat='"$datos["id"] ."'order by link asc");
    echo 
"<ul type=\"cicle\">";
    while(
$datos2 mysql_fetch_assoc($consulta2)){
      echo 
"<li>".$datos["link"];
    }
    echo 
"</ul>";

No he probado el codigo, pues no tengo las tablas, pero espero que te pueda por lo menos orientar.

Saludos y nos cuentas.
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #5 (permalink)  
Antiguo 20/12/2006, 21:52
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 19 años, 2 meses
Puntos: 1
Re: Bucle dentro de bucle?

Gracias Celsius ... justamente eso era lo que había hecho y que me hizo colapsar el Apache ... creo yo que por consumo excesivo de recursos ... por eso buscaba alguna otra opción ... si es que la hay para este tema ... te paso la arquitectura de tablas ...

links_cat
link_cat_id (primary)
link_cat_nombre

links
link_id (primary)
link_cat (foránea)
link_nombre
link_url
link_visitas

Como verás ... la estructura es muy simple ... gracias de todas maneras ...
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #6 (permalink)  
Antiguo 21/12/2006, 03:44
 
Fecha de Ingreso: octubre-2004
Ubicación: Barcelona
Mensajes: 195
Antigüedad: 19 años, 6 meses
Puntos: 7
Re: Bucle dentro de bucle?

¿De qué cantidad de categorías /links estamos hablando? Puedes probar a hacerlo en una sóla consulta y controlar los resultados para armar el menú. Con esto, además, te ahorras unos cuantos accesos a la base de datos...

Código PHP:
$categoria "sin_definir_todavia";
$cerrar_anterior "";
$c mysql_query("SELECT link_cat_nombre, link_nombre, link_url FROM links_cat, links WHERE link_cat_id = link_cat ORDER BY link_cat_nombre, link_nombre");
    while (
$cat mysql_fetch_array($c)) {
        
$nombre_cat_actual $cat['link_cat_nombre'];
        
$nombre_link_actual $cat['link_nombre'];
        if (
$categoria != $nombre_cat_actual) {
            echo 
$cerrar_anterior;
            echo 
"<ul>";
            echo 
"$cat[link_cat_nombre]";
            
$cerrar_anterior "</ul>\r";
            
$categoria $nombre_cat_actual;
        }
        echo 
"<li>$nombre_link_actual</li>\r";
    }
    echo 
$cerrar_anterior;

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 02:04.