Foros del Web » Programando para Internet » PHP »

Problema realizando recorrido de niveles

Estas en el tema de Problema realizando recorrido de niveles en el foro de PHP en Foros del Web. Buenas tardes amigos A ver si alguien me puede ayudar con mi problema, el cual es el siguiente: Tengo una tabla en Mysql llamada niveles_organizacionales, ...
  #1 (permalink)  
Antiguo 30/11/2009, 16:02
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Problema realizando recorrido de niveles

Buenas tardes amigos

A ver si alguien me puede ayudar con mi problema, el cual es el siguiente:

Tengo una tabla en Mysql llamada niveles_organizacionales, la cual tiene la siguiente estructura

idniveles_organizacionales
organizacion
sub_nivel
denominacion

en esta tabla tengo los siguientes registros guardados

idnivel_organizacional | organizacion | sub_nivel | denominacion
28 | 3 | 0 | Direccion General
29 | 3 | 28 | Secretaria
30 | 3 | 28 | Prueba
31 | 3 | 30 | Oficina del Director

Ahora bien, como veran el campo sub nivel vincula un registro con otro, pero necesito mostrar los registros en una lista desplegable de la siguiente forma

Direccion General - Secretaria
Direccion General - Prueba
Direccion General - Prueba - Oficina del Director

y asi sucesivamente

como se daran cuenta debendiendo del nivel al que sea sub nivel debe mostrarlo al lado, por decirlo de cierto modo seria como un arbol, el problema esta en que la cantidad de sub niveles que pueden haber no esta definida, es decir no puedo hacer una cantidad finita de while recorriendo los sub niveles

Por favor quien me pueda ayudar se lo agradeceria enormemente

Saludos
  #2 (permalink)  
Antiguo 30/11/2009, 16:13
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema realizando recorrido de niveles

Es un proceso similar al descrito en http://www.forosdelweb.com/f18/lista...2/#post3181868
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 30/11/2009, 16:49
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema realizando recorrido de niveles

Excelente algo asi es lo que necesito pero el probelma ahora seria que no necesito mostrarlo asi en lista sino como comente , algo asi

Direccion General - Secretaria
Direccion General - Prueba
Direccion General - Prueba - Oficina del Director

es decir el que es padre tendria que mostrarse siempre de primero y luego el hijo y el hijo del hijo y asi sucesivamente, porque asi como me lo mostraste me hace es un arbol .. y lo necesito es como lo escribo porque tengo que meter ese resultado en un select
  #4 (permalink)  
Antiguo 30/11/2009, 16:54
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema realizando recorrido de niveles

Y cual seria el problema de editar el html para quitar los <ul>, </ul> y reemplazar los <li></li> por <option></option>?
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 30/11/2009, 16:57
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema realizando recorrido de niveles

No ese no seria el problema ... el problema es que si tengo estos datos

a, b, c y d

tiene que salir algo asi

a - b
a - c - d

y como esta en el ejemplo saldria algo asi

a
- b
- c
--d

No se si me explico bien
  #6 (permalink)  
Antiguo 30/11/2009, 17:02
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema realizando recorrido de niveles

Si, pero como toda esa informacion esta almacenada en una matriz (array) siempre puedes obtener el nombre del 'padre' con $matriz[$id_del_elemento], solo tienes que ir adaptando el codigo y, si sigues atorado, muestra lo que llevas hecho, asi podremos llegar hasta la solucion del problema.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 30/11/2009, 17:08
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema realizando recorrido de niveles

Ok fijate esto es lo que llevo hecho
asi me muestra el select pero con todos los elementos que tengo la tabla

y necesito mostrarlo cmo te comente ... de verdad disculpa es que tengo todo el dia hechandole cabeza a esto y nada .. ya estoy en cero


te agradesco tu ayuda


mysql_connect("localhost", "root", "1234");
mysql_select_db("gestion_alcaldia");

// Inicializas la matriz
$foros = array();
$result = mysql_query('SELECT idniveles_organizacionales, denominacion, sub_nivel FROM niveles_organizacionales') or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
$foro = $row['idniveles_organizacionales'];
$padre = $row['sub_nivel'];
// Verificas si ya se creo la matriz para el $padre
if(!isset($foros[$padre]))
$foros[$padre] = array();
// Agregas la informacion del foro donde corresponde
$foros[$padre][$foro] = $row;
}
//var_dump($foros);
// Puedes hacer un var_dump($foros); para que veas la estructura
// en $foros[0] quedan solo los foros que no tienen padre (es cero)
// segun tu ejemplo:
// $foros[0] tendra 1 => datos foro 1, 5 => datos foro 5
// $foros[1] tendra 2 => datos foro 2, 4 => datos foro 4
// $foros[2] tendra 3 => datos foro 3
// etc...
echo "<select>";
listar_foros(0); // Ejecutas la funcion que creara el listado, partiendo del index
echo '</select>';


return;
function listar_foros($padre) {
global $foros;
foreach($foros[$padre] as $foro => $datos) {
?>
<option value = "<?=$datos['idnivel_organizacional']?>"><?=$datos['denominacion']?></option>";
<?
// Verificas si el foro tiene "hijos"
if(isset($foros[$foro])) {
echo '<ul>';
listar_foros($foro);
echo '</ul>';
}
echo '</li>';
}

}
  #8 (permalink)  
Antiguo 30/11/2009, 17:13
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema realizando recorrido de niveles

y como veras necesito que los padres de los hijos que se vayan creando se vayan mostrando

es decir como te dije tenemos a,b,c y d

b y c son hijos de a
d es hijo de c

entonces debe mostrar

a - b
a - c - d

fijate que en todo momento se meustra (a) ya que es padre de todos y a su ves se muestra los hijos
  #9 (permalink)  
Antiguo 30/11/2009, 18:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema realizando recorrido de niveles

Si estas creando correctamente la matriz, solo habria que agregar una variable extra en la funcion listar_foros:

Código php:
Ver original
  1. <?php
  2. echo "<select>";
  3. listar_foros(0, ''); // Ejecutas la funcion que creara el listado, partiendo del index
  4. echo '</select>';
  5.  
  6.  
  7. return;
  8. function listar_foros($padre, $titulo) {
  9.     global $foros;
  10.     foreach($foros[$padre] as $foro => $datos) {
  11. ?>
  12.         <option value="<?php echo $datos['idnivel_organizacional']; ?>"><?php echo $titulo . $datos['denominacion']; ?></option>
  13. <?php
  14.         // Verificas si el foro tiene "hijos"
  15.         if(isset($foros[$foro])) {
  16.             // Aqui vas agregando el texto necesario al titulo
  17.             $nuevo_titulo = ($titulo == '') ? $datos['denominacion'] : "$titulo - {$datos['denominacion']} -";
  18.             listar_foros($foro, $nuevo_titulo);
  19.         }
  20.     }
  21. }
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 01/12/2009, 07:29
 
Fecha de Ingreso: noviembre-2008
Ubicación: Venezuela
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema realizando recorrido de niveles

Excelente hermano.. le hice algunos arreglos para que terminara de salir como lo deseaba pero esta perfecto muchisimas gracias de verdad..

aqui les dejo el codigo para que veas los ultimos arreglos

<?

// Inicializas la matriz
$foros = array();
$result = mysql_query('SELECT idniveles_organizacionales, denominacion, sub_nivel FROM niveles_organizacionales') or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
$foro = $row['idniveles_organizacionales'];
$padre = $row['sub_nivel'];
// Verificas si ya se creo la matriz para el $padre
if(!isset($foros[$padre]))
$foros[$padre] = array();
// Agregas la informacion del foro donde corresponde
$foros[$padre][$foro] = $row;
}

echo "<select>";
listar_foros(0, ''); // Ejecutas la funcion que creara el listado, partiendo del index
echo '</select>';


return;
function listar_foros($padre, $titulo) {
global $foros;
foreach($foros[$padre] as $foro => $datos) {
// Verificas si el foro tiene "hijos"
if(isset($foros[$foro])) {
// Aqui vas agregando el texto necesario al titulo
$nuevo_titulo = ($titulo == '') ? $datos['denominacion'] : "$titulo - {$datos['denominacion']} -";
listar_foros($foro, $nuevo_titulo);
}else{
?>
<option onclick="alert('<?=$datos['idniveles_organizacionales']?>')" value="<?=$datos['idnivel_organizacional']?>">
<?=$titulo ." - ". $datos['denominacion']?>
</option>
<?
}
}
}
?>


saludos
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 00:58.