Foros del Web » Programando para Internet » PHP »

Conocer categoría a partir de subcategoría

Estas en el tema de Conocer categoría a partir de subcategoría en el foro de PHP en Foros del Web. ¡Buenas, foreros! Tengo una consulta que me tiene bloqueado, y tal vez ustedes puedan ayudarme. Lo que yo necesito hacer es un directorio virtual de ...
  #1 (permalink)  
Antiguo 30/01/2009, 17:52
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 20 años, 2 meses
Puntos: 2
Conocer categoría a partir de subcategoría

¡Buenas, foreros! Tengo una consulta que me tiene bloqueado, y tal vez ustedes puedan ayudarme.

Lo que yo necesito hacer es un directorio virtual de los negocios de mi ciudad, organizándolos por rubros generales (categorias) y rubros más específicos (subcategorías).
Supongamos que yo incorporo los siguientes rubros:
- Ropa
- Calzado
- Accesorios

Hasta ahora no hay problema, en la base de datos (MYSQL), en el registro que corresponde a cada producto, pongo el ID de la categoría (rubro) al que pertenece.

Ahora bien, deseo agregar rubros más específicos como subcategorías. La lista, entonces, quedaría así:

-Ropa
-- Ropa para hombres
-- Ropa para mujeres
-- Ropa infantil
-Calzado
-- Calzado masculino
-- Calzado femenino
-Accesorios
-- Accesorios para hombres
-- Accesorios para mujer


Creo que es momento de aclarar algo: las categorías y las subcategorías van todas en la misma tabla, cuya estructura es esta:

Código:
TABLE `dir_categorias` (
  `ID` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(30) default NULL,
  `desc` varchar(255) default NULL,
  `pID` int(10) unsigned default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Así, cuando quiero crear una categoría general, dejo el campo `pID` en blanco. Si es una subcategoría, pongo el ID de la categoría "padre".

La pregunta es la siguiente: hay alguna forma de que un negocio que, por ejemplo, vende ropa, al estar en la subcategoría "ropa para hombres" se incluya (sólo necesito esto al mostrar la información) automáticamente en la categoría "padre"? (que sería, en este caso, "Ropa").



Si llegado este punto pueden ayudarme, ¡gracias! Si no, gracias de todas formas por leer!
__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
  #2 (permalink)  
Antiguo 30/01/2009, 20:42
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Conocer categoría a partir de subcategoría

El título de tu mensaje da una idea contraria a lo que deseas lograr. Debiera ser algo como "Extraer los elementos de los hijos de una categoría padre"

Para ello tendrías que realizar varias consultas usando funciones recursivas. Tienes el id de categoría 2. En una función que recibe como parámetro el id de la categoria padre tienes una consulta que busca en la bd si hay hijos de esa categoria. Si los hay, empieza a ejecutarse la misma función para cada uno de esos hijos, y nietos, y así sucesivamente dependiendo del número de niveles que tengas.

La idea general es esta:

Código PHP:
function hijos($id) {
    
// Generamos el array que almacenará los hijos, nietos, etc. etc. de la categoria $id
    
$hijos = array() 

    
// Buscamos los hijos
    
$r mysql_query("select id from categorias where cat_padre = '$id'")

    
// Vemos si hay hijos
    
if(mysql_num_rows($r) > 0) {

        
// Sí hay hijos, creamos un ciclo con ellos
        
while($hijo mysql_fetch_assoc($r)) {

            
// Agregamos el hijo al array
            
$hijos[] = $hijo['id']

            
// Buscamos nietos de $id, para ello llamamos recursivamente a hijos(), 
            // pero pasándole como parámetro del id del hijo actual
            
if($h hijos($hijo['id'])) {

                
// Los nietos y demás serán guardados en $h. Sumamos los arrays
                
$hijos += $h

            
}

        }
    } else {

        
// Si no hay hijos de $id, la función regresa false. Esto es importante para
        // detener la recursividad del ciclo
        
return false

    
}

    
// Regresamos los hijos encontrados
    
return $hijos
}

$categorias hijos(2);
print_r($categorias); 
Esa es la idea general, y no te aseguro que no tenga errores. Ya teniendo ese array con todos los subordinados de tu categoria "padre", haces un implode() para unirlos con una coma, y la consulta la haces así:
Código PHP:
$categorias implode(','$categorias);

$sql "SELECT * FROM negocios WHERE categoria IN ($categorias)"
Esa es la idea general. Lo menos que quiero es que vengas a copiarpegar. Por algo me he esforzado en comentarte cada línea para que entiendas como funciona una función recursiva. Estúdiala y modifícala para que se adapte a tus necesidades.

Un saludo,
  #3 (permalink)  
Antiguo 31/01/2009, 07:43
 
Fecha de Ingreso: febrero-2004
Mensajes: 138
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: Conocer categoría a partir de subcategoría

¡Muchas gracias!

Ahora voy a ver si la puedo implementar
__________________
De mucho estudiar nadie se murió, pero mas vale no arriesgarse
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:53.