Ver Mensaje Individual
  #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,