Foros del Web » Programando para Internet » PHP »

Ayuda con un problema q no puedo resolverlo

Estas en el tema de Ayuda con un problema q no puedo resolverlo en el foro de PHP en Foros del Web. Hola tengo un problema q parece simple q ya llevo casi 1 semana tratando de resolverlo,se trata de un arbol genealogico Tengo una tablaen la ...
  #1 (permalink)  
Antiguo 07/04/2009, 08:26
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Ayuda con un problema q no puedo resolverlo

Hola tengo un problema q parece simple q ya llevo casi 1 semana tratando de resolverlo,se trata de un arbol genealogico
Tengo una tablaen la base de datos llamada FAMILIAR que representa un familiar q pertenece a la familia
Esta tabla tiene columnas como nombre,edad,fecha de nacimiento,etc,etc,pero tiene una columna especial llamada"fam_id_pat" q es el id del padre del registro actual,osea esta tabla tiene una relacion a si misma
En donde tiene

fam_id El id
fam_id_pat El id del padre del registro actual que tambien es un "familiar"
fam_gen La generacion a la que corresponde(es un int)
fam_nom El nombre
....... Tiene otras columnas pero estas son las q importan
Les dejo un ejemplo

fam_id,fam_id_pat,fam_gen,fam_nom
4,2,4,'Jose perez' ----------->El papa
6,4,3,'Pedro Perez'---------->Los hijos
8,4,3,'Ana Perez'------------ >Los hijos
12,4,3,'MAria Perez'--------->Los hijos
24,,6,4,'Juan Perez Figueroa'------------>Nieto de Jose Perez e hijo de Pedro Perez
25,,6,4,'Alicia Perez Figueroa'------------>Nieto de Jose Perez e hijo de Pedro Perez

Creo q se entendio,no?
Ahora mi problema es,si por alguna razon Jose Perez ingreso mal el atributo fam_gen y lo modifica,por ejemplo lo pone a 6, entonces lo que quiero es que todos sus hijos,nietos ,bisnietos,etc,etc,cambien de generacion de acuerdo a la generacion q se modifico en Jose Perez
Osea la generacionmodificada deberia ser asi:

4,2,6,'Jose perez' ----------->El papa
6,4,7,'Pedro Perez'---------->Los hijos
8,4,7,'Ana Perez'------------ >Los hijos
12,4,7,'MAria Perez'--------->Los hijos
24,,6,8,'Juan Perez Figueroa'------------>Nieto de Jose Perez e hijo de Pedro Perez
25,,6,8,'Alicia Perez Figueroa'------------>Nieto de Jose Perez e hijo de Pedro Perez

Como hago eso?
cada "familiar" es un registro de la tabla FAMILIAR
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #2 (permalink)  
Antiguo 07/04/2009, 08:48
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 14 años, 3 meses
Puntos: 55
Respuesta: Ayuda con un problema q no puedo resolverlo

bueno lo q vas a tener q hacer es algo asi, te lo paso explicado pq no tengo tiempo de codificarlo

una vez q tienes el id del familiar a actualizar generacion, tiene q buscar si tiene hijos,

select * from familiar where fam_id_pat='idDelPadreQueCambioLaGeneracion'

si tiene hijos mysql_num_rows()>0 tiene q sumarle 1 al nuevo valor de la generacion del padre y actualizar el de sus hijos, y a la vez vas guardando los id de los hijos

luego con estos ids vuelves a hacer otros selects

select * from familiar where fam_id_pat = 'idDeUnoDeLosHijos'

si tiene hijos (serian los nietos del q cambiaste rpimero) tienes q actualizar su generacion a generacion del abuelo +2 o generacion del padre +1 y guardas nuevamente los ids de los nietos para seguir buscando por los bisnietos

y obvimente no te olvides del resto de los hijos q tomaste los ids en la primera iteracion

lo ideal seria un anidado de funciones

espero te sirva la miniguia

__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 07/04/2009, 15:02
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ayuda con un problema q no puedo resolverlo

mmmmmm,loq me dijiste funciona bien hasta cierta parte
Recuerda que un padre puede tener "n" hijos y sus hijos pueden tener "n" hijos y asi sucesivamente
Lo q me indicas no es posible porq lo q haria serai recorrer una rama del arbol hasta el final y q de los demas? se perderian sus ids(sus identificadores) y ya no se sabria ademas a q nueva generacion corresponden
Existe alguna solucion? supongo q esto ya se presento mas antes ,no?
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #4 (permalink)  
Antiguo 08/04/2009, 08:52
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ayuda con un problema q no puedo resolverlo

alguna sugerencia?
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #5 (permalink)  
Antiguo 08/04/2009, 09:13
 
Fecha de Ingreso: febrero-2009
Ubicación: cancun!
Mensajes: 898
Antigüedad: 10 años, 10 meses
Puntos: 15
Respuesta: Ayuda con un problema q no puedo resolverlo

ON UPDATE CASCADE
podrias pobrar algo asi
para modificar en todos los registros involucrados
http://technet.microsoft.com/es-es/l...3(SQL.90).aspx
aki hay algunos ejemplos
espero te de una idea
saludines!!
__________________
WHERE IS MY BLUE SUNNY SKY??
pd: todos los karmas son bienvenidos :D
  #6 (permalink)  
Antiguo 09/04/2009, 10:04
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ayuda con un problema q no puedo resolverlo

mmmmmm,la verdad es q no creo q me sirva de mucho,ademas mi base de datos es mysql y no existe eso en alter table
Yo creo q existe una logica para resolver esto,no? lamentablemente yo no puedo encontrarla,talvez alguno de ustedes si
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #7 (permalink)  
Antiguo 10/04/2009, 11:01
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ayuda con un problema q no puedo resolverlo

ayuda porfavor,necesito solucionar este problema
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #8 (permalink)  
Antiguo 10/04/2009, 13:46
 
Fecha de Ingreso: diciembre-2008
Mensajes: 54
Antigüedad: 11 años
Puntos: 0
Respuesta: Ayuda con un problema q no puedo resolverlo

guarda en una variable la generacion de la persona que quieras modificar y su id luego haces lo que dijo emiliodeg

select * from tutabla where generacion del padre = variablegeneracion +1 and id del padre = variableid

y tienes todos los hijos luego haces

select * from tutabla where generacion del padre = variablegeneracion +2 and id del padre = variableid

y tienes todos los nietos asi sucesivamente hasta que el resultado del select sea 0
  #9 (permalink)  
Antiguo 10/04/2009, 14:10
 
Fecha de Ingreso: diciembre-2008
Mensajes: 54
Antigüedad: 11 años
Puntos: 0
Respuesta: Ayuda con un problema q no puedo resolverlo

me acabo de dar cuenta de que no funcionaria lo que escribi antes je

guarda como dije el id y la generacion de la persona que quieras modificar luego haces asi a ver si anda

select * from tu tabla where iddelpadre = variableid and generacion = genracionvariable + 1 as hijos

select * from tutabla where geracion = geracionvariable +2 and iddelpadre in (select id from hijos) as nietos

y asi hasta que el resultado del select sea 0

nose si la sintaxis esta bien espero te sirva o almenos te de una idea de como hacerlo
  #10 (permalink)  
Antiguo 13/04/2009, 09:16
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ayuda con un problema q no puedo resolverlo

mmm,no soy un experto pero creo q tu consulta esta mal, en que lugar cambiamos la generacion? deberia haber un update,no?
Alguien que tenga otra idea?
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #11 (permalink)  
Antiguo 14/04/2009, 00:21
 
Fecha de Ingreso: diciembre-2008
Mensajes: 54
Antigüedad: 11 años
Puntos: 0
Respuesta: Ayuda con un problema q no puedo resolverlo

obvio yo solo te estoy dando como conseguir separar todos los hijos por un lado los nietos por otro visnietos y asi sucesivamente vos con eso haces lo que se te plasca
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:39.