Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ayuda con Select

Estas en el tema de Ayuda con Select en el foro de Mysql en Foros del Web. Hola a todos! Llevo poco tiempo trabajando con MySQL y tengo una duda que me lleva loco... Os expongo el problema y a ver que ...
  #1 (permalink)  
Antiguo 16/09/2008, 03:51
 
Fecha de Ingreso: septiembre-2008
Mensajes: 37
Antigüedad: 15 años, 7 meses
Puntos: 0
Ayuda con Select

Hola a todos!

Llevo poco tiempo trabajando con MySQL y tengo una duda que me lleva loco...

Os expongo el problema y a ver que se puede hacer.

En una tabla tengo los datos básicos de un usuario, en otra tabla tengo los idiomas de europa, y en una última tabla relaciono ambas tablas mediante id's.

Por ejemplo:

Tabla 1 (Usuarios):
ID=1
Nombre="Pepe"
Apellidos="Martinez"
---------------------------
ID=2
Nombre="Juan"
Apellidos="Perez"
---------------------------
...etc...


Tabla 2 (Idiomas):
ID=1
Idioma="Inglés"
---------------------------
ID=2
Idioma="Alemán"
---------------------------
...etc...


Tabla 3 (Relación usuarios<->idiomas):
ID=1
ID_TABLA1=1
ID_TABLA2=1
---------------------------
ID=2
ID_TABLA1=1
ID_TABLA2=2
---------------------------
ID=3
ID_TABLA1=2
ID_TABLA2=1


Bien, pues ahora quiero extraer de la tabla1 el "Nombre" siempre y cuando el usuario hable ingles y alemán.


Gracias y saludos!
  #2 (permalink)  
Antiguo 16/09/2008, 05:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con Select

acláranos un poco qué significan los datos de la tabla 3, registro por registro. Yo al menos necesito esa aclaración para poder ayudarte. Qué es cada cosa en:
ID=1
ID_TABLA1=1
ID_TABLA2=1
etc.
  #3 (permalink)  
Antiguo 16/09/2008, 06:21
 
Fecha de Ingreso: septiembre-2008
Mensajes: 37
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con Select

Jurena, gracias por tu atención!


ID=1, es el número de registro de la tabla3 (es el índice principal).
ID_TABLA1=1, haría relación al registro 1 de la Tabla 1 ("Pepe Martinez")
ID_TABLA2=1, haría relación al registro 1 de la Tabla 2 ("Inglés")

ID_TABLA1=1, relación con el registro 1 de la Tabla 1 ("Pepe Martinez")
ID_TABLA2=2, relación con el registro 2 de la Tabla 2 ("Alemán")

Por lo tanto, "Pepe Martinez" habla Inglés y Alemán.
  #4 (permalink)  
Antiguo 16/09/2008, 07:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con Select

No sé cómo has llamado a la tabla3, yo la he llamado tabla3

SELECT CONCAT (u.nombre, ' ', u.apellidos), COUNT(t3.idtabla2) numerolenguas FROM usuarios u INNER JOIN tabla3 t3 ON u.id = t3.id_tabla1 INNER JOIN idiomas i ON i.id = t3.idtabla2 WHERE t3.id_tabla2 = 1 OR t3.id_tabla2 = 2 GROUP BY t3.id_tabla1 HAVING COUNT(t3.id_tabla2) = 2

No lo he probado. Ya nos dirás
  #5 (permalink)  
Antiguo 16/09/2008, 09:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 37
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con Select

Ha funcionado perfectamente!

Te debo un café

Graciasss!!
  #6 (permalink)  
Antiguo 16/09/2008, 11:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con Select

Una cosa más: aunque creo que no cometerás el error de introducir dos veces el conocimiento de una lengua para una misma persona, lo que te llevaría a error con la sintaxis que te he puesto (debes controlar eso con programación o con triggers), deberías eludir el problema añadiendo un distinct a los count


SELECT CONCAT (u.nombre, ' ', u.apellidos), COUNT(DISTINCT t3.idtabla2) numerolenguas FROM usuarios u INNER JOIN tabla3 t3 ON u.id = t3.id_tabla1 INNER JOIN idiomas i ON i.id = t3.idtabla2 WHERE t3.id_tabla2 = 1 OR t3.id_tabla2 = 2 GROUP BY t3.id_tabla1 HAVING COUNT(DISTINCT t3.id_tabla2) = 2

tampoco lo he probado.
  #7 (permalink)  
Antiguo 16/09/2008, 12:07
 
Fecha de Ingreso: septiembre-2008
Mensajes: 37
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con Select

Con PHP controlaré de no duplicar usuarios e idiomas, pero igualmente utilizaré ese segundo SELECT, por si acaso...
  #8 (permalink)  
Antiguo 16/09/2008, 12:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayuda con Select

me olvidé de decirte que con un índice UNIQUE sobre esos dos campos de la tabla3 evitarías las repeticiones...

Suerte.
  #9 (permalink)  
Antiguo 17/09/2008, 01:23
 
Fecha de Ingreso: septiembre-2008
Mensajes: 37
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con Select

Si, la verdad es que sería lo suyo hacerlo con UNIQUE, a veces nos complicamos!
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 01:21.