Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Question Mostrar en un DBGRID Relacion Muchos Muchos

Es un juego de rol...

El Nivel de habilidades de los personajes son:
id=descripcion
1=Malo
2=Regular
3=Bueno
tanto el numero como su descripcion me son necesarios guardar en la base de datos y por lo tanto uso dos tablas:

TABLA 1 personajes:
id_personaje (Entero)
nombre (Cadena)
id_habilidad_volar (Entero)
id_habilidad_saltar (Entero)
id_habilidad_correr (Entero)

TABLA 2 habilidades:
id_habilidad (Entero)
descripcion (Cadena)

y armo un DBGrid, y quiero que me muestre el personaje, y el nivel de su habilidad:

El DBGrid se ve asi:
||| Personajes ||| Habilidad Volar |||
||| Mago ||| Regular |||
||| Guerrero ||| Malo |||
||| Hada ||| Bueno |||

Codigo:
Código:
SELECT nombre, id_habilidad_volar, habilidades.descripcion
FROM personajes
INNER JOIN habilidades
ON personajes.id_habilidad_volar = habilidades.id_habilidad
ORDER BY nombre
Pero estos personajes tienen muchas habilidades, entonces quiero que el DBGrid se vea asi:
||| Personajes ||| Habilidad Volar ||| Habilidad Saltar ||| Habilidad Correr |||
||| Mago ||| Regular ||| Malo ||| Bueno |||
||| Guerrero ||| Malo ||| Bueno ||| Regular |||
||| Hada ||| Bueno ||| Malo ||| Bueno |||

y aqui no se como plantearlo... la solucion rapida es usar un StringGrid y cargar los datos uno por uno XD
pero creo que podria hacer una consulta SQL que me permitiera hacer esto en un solo paso.

¿Alguna Sugerencia? Gracias!
__________________
"It's nice to be important, but it's more important to be nice"

Última edición por dmassive fecha: 11-02-2009 a las 13:11:58.
Responder Con Cita
  #2  
Antiguo 11-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Utiliza tres veces la tabla HABILIDADES en la SQL haciendo INNER JOIN con la tabla PERSONAJES, pero utilizando Alias junto a la tabla, para que la consulta salga correctamente.
De paso una una Alias para PERSONAJES (p).

Código SQL [-]
... 
INNER JOIN habilidades h1 ON p.habilidad_volar=h1.id_habilidad
INNER JOIN habilidades h2 ON p.habilidad_volar=h2.id_habilidad
INNER JOIN habilidades h3 ON p.habilidad_volar=h3.id_habilidad
...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Algo así:

Código SQL [-]
Select p.id_personaje, p.nombre, 
h1.id_habilidad_volar VOLAR, 
h2.id_habilidad_saltar SALTAR, 
h3.id_habilidad_correr CORRER 
from personajes p
INNER JOIN Habilidades h1 on p.id_habilidad_volar=h1.id_habilidad
INNER JOIN Habilidades h2 on p.id_habilidad_saltar=h2.id_habilidad
INNER JOIN Habilidades h3 on p.id_habilidad_correr=h3.id_habilidad
order by nombre

Pruebalo, tal vez me de dejado algo...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 12-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Red face

Probe utilizando alias, primero con uno y va bien:
Código SQL [-]
SELECT p.id_personaje, p.nombre,
h1.descripcion AS volar
FROM personajes p
INNER JOIN habilidades h1 ON p.id_habilidad_volar = h1.id_habilidad
ORDER BY nombre

Pruebo añadir una segunda habilidad y da error:
Código SQL [-]
SELECT p.id_personaje, p.nombre,
h1.descripcion AS volar,
h2.descripcion AS saltar
FROM personajes p
INNER JOIN habilidades h1 ON p.id_habilidad_volar = h1.id_habilidad
INNER JOIN habilidades h2 ON p.id_habilidad_saltar = h2.id_habilidad
ORDER BY nombre
El Error es:
Cita:
Error de sintaxis (falta operador) en la expresion de consulta 'p.id_habilidad_volar = h1.id_habilidad INNER JOIN habilidades h2 ON p.id_habilidad_saltar = h2.id_habilidad'
__________________
"It's nice to be important, but it's more important to be nice"
Responder Con Cita
  #5  
Antiguo 12-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Qué base de Datos utilizas?
¿Has probado a lanzar la consulta directamente a la Base de Datos?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 12-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Red face

La base de datos esta hecha con MS Access 2003, corriendo Delphi 7 usando ADO.

Pero efectivamente la consulta funciona, porque la probe con MySQL (con PHP) y PySQLite (con Python) y da lo resultados que quiero... pero en Access no le encuentro la vuelta.
__________________
"It's nice to be important, but it's more important to be nice"
Responder Con Cita
  #7  
Antiguo 12-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Thumbs up

Luego de mucho buscar consultas SQL en access encontre algo en este thread que me sirvio como guia para intentar resolver este tema.

La solucion era anidar los INNER JOIN con parentesis por la tanto la consulta queda asi:
Código SQL [-]
SELECT p.id_personaje, p.nombre,
h1.descripcion AS volar,
h2.descripcion AS saltar,
h3.descripcion AS correr
FROM ((personajes p
INNER JOIN habilidades h1 ON p.id_habilidad_volar = h1.id_habilidad)
INNER JOIN habilidades h2 ON p.id_habilidad_saltar = h2.id_habilidad)
INNER JOIN habilidades h3 ON p.id_habilidad_correr = h3.id_habilidad
ORDER BY nombre

Muchas Gracias Neftali por tu ayuda!
__________________
"It's nice to be important, but it's more important to be nice"
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
Tipo relación de 0 a muchos en Accesss jlrbotella SQL 6 21-09-2007 15:57:56
Problemas con generadores en relacion Muchos-a-Muchos Hagen Firebird e Interbase 3 30-10-2006 16:47:51
Relacion Muhcos a muchos Sito Conexión con bases de datos 1 11-04-2006 13:25:29
UPDATE en una relacion 1 a Muchos... JorgeBec SQL 4 19-11-2004 20:16:37
Consulta SQl, relacion 1 a muchos Walter SQL 3 15-07-2003 03:13:28


La franja horaria es GMT +2. Ahora son las 15:22:02.


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