Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-07-2007
eugenioclrc eugenioclrc is offline
Registrado
 
Registrado: jul 2007
Posts: 3
Poder: 0
eugenioclrc Va por buen camino
Question Problema logico

Antes que nada les voy a mostrar las tablas que tengo.

CREATE TABLE `jerarquia` (
`idhijo` int(11) NOT NULL default '0',
`idpadre` int(11) NOT NULL default '0',
`hijos` int(1) NOT NULL default '0',
KEY `idpadre` (`idpadre`),
KEY `idcat` (`idcat`)
)

CREATE TABLE `nombres` (
`id` int(11) NOT NULL,
`nombre` int(11) NOT NULL default '0',
PRIMARY KEY `id` (`id`)
)



Mediante esta tabla represento un arbol, donde idpadre es la identificadion del padre, que es un numero, idhijo es la identificacion numerica del hijo. En la tabla nombres tengo los nombres de los integrantes del arbol.



Vamos a dar un ejemplo, digamos que Carlos, es papa de Alberto, que es papa de Juan. Esto reflejado en la base seria;



tabla nombres;

(1,'Carlos'), (2,'Alberto'), (3,'Juan');



tabla jerarquia;

(1,0,1), (2,1,1), (3,2,0);



Partiendo del id de alguien quiero obtener su arbol genealogico, de la forma id,nombre. Por ejemplo, me dan la id = 2 entonces tendria que obtener;

(1,'Carlos')
(2,'Alberto')

Y todo esto haciendo una sola consulta.



Alguna sugerencia o idea?
Responder Con Cita
  #2  
Antiguo 06-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
mmmmmmmmm con una sentencia:

SELECT DISTINCT(P.NOMBRE) ,A.NOMBRE,H.NOMBRE FROM NOMBRES A
LEFT JOIN JERARQUIA J_HIJO ON (A.ID=J_HIJO.IDHIJO) LEFT JOIN
JERARQUIA J_PADRE ON (J_PADRE.IDPADRE=A.ID)
LEFT JOIN NOMBRES H ON (J_HIJO.IDPADRE=H.ID)
LEFT JOIN NOMBRES P ON (J_PADRE.IDHIJO=P.ID)
WHERE A.ID=2

así funciona (aunque repite el nombre del padre si algún registro tiene varios hijos). probablemente con un SP sería mas óptimo
Responder Con Cita
  #3  
Antiguo 06-07-2007
eugenioclrc eugenioclrc is offline
Registrado
 
Registrado: jul 2007
Posts: 3
Poder: 0
eugenioclrc Va por buen camino
Smile

Hola Gabriel, muchas gracias por responderme tan rapidoamente!!! he posteado la misma pregunta en algunos otros foros hace algun tiempo y nadie contesto.

Por cierto, que es un SP?

Saludos
Responder Con Cita
  #4  
Antiguo 06-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Store Procedure
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 09-07-2007
eugenioclrc eugenioclrc is offline
Registrado
 
Registrado: jul 2007
Posts: 3
Poder: 0
eugenioclrc Va por buen camino
Question Mas dudas

Visto y considerando la respuesta mas que satisfactoria del ejemplo anterior, voy a atreverme a pedir ayuda nuevamente, pero con un caso mas definido.

Voy primero a describir el problema.

Digames que tengo una tabla llamada `Categorias`, y en ella hay dos campos, uno llamado `id`, que es de tipo int. Y otro llamado nombre que es un varchar.
Un ejemplo podria ser;

id,nombre
1,'Autos'
2,'Audi'
3,'Tuneado'
4,'0 Kilometro'
5,'Porsche'
6,'Motos'
7,'Honda'

Y tengo otra tabla, que relaciona estas categorias entre si, llamada `jerarquia`, que tiene un `id`, que es un int. Tiene un campo llamado `idcat` que es el numero que hace referencia a la tabla `Categorias`, otro campo llamado `idpadre` que tambien hacer referencia a la tabla `Categorias` y nos dice quien seria el padre de `idcat` (`idpadre` es 0 si no tiene padre, es decir es una categoria principal), y un ultimo campo que es llamado `hijos`, que dice si la categoria `idcat` tiene algun hijo. Al ejemplo anterior le corresponderian los siguientes valores;

id,idcat,idpadre,hijos
NULL,1,0,1
NULL,2,1,1
NULL,3,2,0
NULL,4,2,0
NULL,5,1,0
NULL,6,0,1
NULL,7,6,0

Por ultimo, tengo la tabla `productos`, que contiene un campo llamado `id`, un campo `nombre`, y por ultimo un campo llamado `cat`, que hace referencia a la tabla `Categorias`.`id`, cabe aclarar que siempre se va a referir a una categoria que no tenga hijos.
Un ejemplo seria;

id,nombre,cat
NULL,'Posche 911',5
NULL,'Audi c4 verde',4
NULL,'Audi Gris modelo 82',3
NULL,'Moto 0km',7

Ahora vamos con el problema, obtener todos los productos que sean de una categoria que no tiene hijos es facil, basta con hacer un simple where `cat` = categoriaquequeremos.
Pero que pasa si yo quisiera tener todos los que pertenecen a la categoria Autos por herencia de sus padres?


Saludos, y perdon por ser tan extenso, pero este tipo de problemas suelen necesitar una buena descripcion.
Gracias!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
borrado logico @-Soft Conexión con bases de datos 0 25-06-2004 14:32:22
Di-agnóstico gineco-lógico santana Humor 1 13-06-2004 08:52:30


La franja horaria es GMT +2. Ahora son las 09:36:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi