Foros del Web » Programando para Internet » PHP »

Error de logica ? :S

Estas en el tema de Error de logica ? :S en el foro de PHP en Foros del Web. Hola amigos Veo en esta funcion que me hice... que tengo un problema de logica... las cosas no han salido como yo pensaba jejeje... pero ...
  #1 (permalink)  
Antiguo 20/04/2006, 15:04
 
Fecha de Ingreso: enero-2005
Mensajes: 149
Antigüedad: 19 años, 3 meses
Puntos: 2
Error de logica ? :S

Hola amigos

Veo en esta funcion que me hice... que tengo un problema de logica... las cosas no han salido como yo pensaba jejeje... pero si mas o menos como venia pensaba...

La funcion consiste en mostrar categorias padres e hijo, de tal forma que cada categoria padre tiene sus correpondientes categorias hijo... Para hacer esto, pensé que seria bueno hacerlo con todas las categorias del tiron... asi que se me vino a la cabeza usar foreach con la seleccion de todas las categorias y hacer otra seleccion desde mysql que te seleccionase todas las categorias hijo que corresponden a la categoria padre...

Pero veo veo que el resultado es que primero muestra todas categorias padre y despues todas las categorias hijo, para cada categoria padre... Supongo... esto es por que, la funcion se ejecuta una vez y lo procesa todo sin hacer bucle para cada uno de los valores las categorias padre...

Ademas tampoco tengo mucha idea de optimizar codigo... posiblemente la forma de hacerlo os parezca codigo bizarro... Aceptaré criticas, si... tambien aceptaria algun consejo ^^ o alguna ayudita...

Sé que podria hacerlo en vez de con foreach con bucle for y se deberia acabar el problema supongo... pero... me he encaprixao del foreach...

Los codigos funcionan... aunque el resultado sea erroneo y he puesto los codigos mysql para que pueda probarlo o usarlo quien quiera...

Gracias de antemano.
eh aki un novato ^^

Código PHP:
/*
        categorias                subcategorias        
    id_cat_padre    cat_padre        id_cat_padre    cat_hijo
    1        informatica              1                  xhtml
    2        deportes                 1                 css
    3        ciencia                  2                  futbol
    4        cultura                  2                  formula 1
    5        arte                      6              cosmetica
    6        belleza                 6                  peluqueria            
*/

CREATE TABLE `categorias` (
  `
id_cat_padreint(9NOT NULL auto_increment,
  `
cat_padrevarchar(20NOT NULL default '',
  
PRIMARY KEY  (`id_cat_padre`)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

CREATE TABLE `subcategorias` (
  `
id_cat_padreint(9NOT NULL default '0',
  `
cat_hijovarchar(20NOT NULL default '',
  
KEY `id_cat_padre` (`id_cat_padre`)
ENGINE=InnoDB DEFAULT CHARSET=latin1
Código PHP:
function categorias() {

    
//Seleccionamos las categorias padre "cat_padre" donde la id_cat_padre sea mayor a 0... son todas...
        //lo hago asi para poder usar el id_cat_padre sin que el foreach lo muestre

    
$query mysql_query("SELECT cat_padre FROM categorias WHERE id_cat_padre > 0");
    
    while (
$result mysql_fetch_row($query)) {
        foreach(
$result  as $cat_padre) {
            echo 
'<ul>' $cat_padre '</ul>'// Se muesgran todas las categorias padre

            // Aqui en teoria le digo que las categorias que tengan la id de la categoria padre se muestren...
            // Muestra todas las subcategorias y no solo las que le corresponden para su categoria padre...

            
$query1 mysql_query("SELECT sub.cat_hijo FROM subcategorias sub, categorias cat WHERE sub.id_cat_padre = $id_cat_padre");
            while (
$result1 mysql_fetch_row($query1)) {
                foreach(
$result1  as $cat_hijo) {
                    echo 
'<li>' $cat_hijo '</li>';    
                }
            }
        }
    }
}

$host "127.0.0.1";
$user "XXXXXXXXXX";
$pass "XXXXXXXXXX";
$db "pruebas";
$link = @mysql_connect($host$user$pass);
$query = @mysql_select_db($db$link);

categorias();

mysql_close(); 

?> 
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 06:43.