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.286
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.286
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.286
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
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 18:53:39.


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