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

Select en MySQL con tablas relacionadas

Estas en el tema de Select en MySQL con tablas relacionadas en el foro de Mysql en Foros del Web. Hola. Tengo tres tablas en MySQL : poker_usuarios poker_partidas poker_partidas_apuntadas Los datos de poker_partidas_apuntadas se actualizan, o se borran, al cambiar los datos de un ...
  #1 (permalink)  
Antiguo 10/01/2011, 12:57
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Pregunta Select en MySQL con tablas relacionadas

Hola.

Tengo tres tablas en MySQL:

poker_usuarios



poker_partidas


poker_partidas_apuntadas



Los datos de poker_partidas_apuntadas se actualizan, o se borran, al cambiar los datos de un usuario en la tabla "poker_usuarios" o al borrar una partida en "poker_partidas". Bien.

Sé hacer para listar los jugadores que están jugando una partida, por ejemplo la partida número 2:
SELECT usuario FROM `poker_partidas_apuntadas` WHERE iddelapartida=2

Ahora bien, dado que el nombre de una partida podria repetirse, he tenido que poner en la última tabla la ID de la partida. ¿Cómo podría hacer para listar las partidas en las que está inscrito un jugador? Por ejemplo, que me diga el nombre de todas las partidas donde "peral" está apuntado, no la ID.

Muchas gracias.
  #2 (permalink)  
Antiguo 10/01/2011, 14:36
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Select en MySQL con tablas relacionadas

Buenas tardes varuk, en tu post te faltó especificar cual es la estructura de tus tablas, así como decirnos qué información guardas en cada una de ellas y cómo están relacionadas. También nos serviría de mucho que nos pusieras algunos datos de ejemplo y qué nos digas que esperas de salida, para poder tratar de ayudarte.

saludos
leo.
  #3 (permalink)  
Antiguo 10/01/2011, 15:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Select en MySQL con tablas relacionadas

SELECT pp.nombrepartida FROM poker_partidas_apuntadas ppa INNER JOIN poker_partidas pp ON ppa.iddelapartida = pp.idpartida WHERE ppa.usuario ='peral'

consejos:
1) en la tabla poker_partidas_apuntadas, yo usaría en lugar de usuario el campo iduser
2) procura poner el mismo nombre a las PK y FK relacionadas. Si usas idpartida para poker_partidas usa idpartida también para poker_partidas_apuntadas.
Si lo haces la consulta habría que retocarla, pero sería algo más eficiente y más estándar
  #4 (permalink)  
Antiguo 10/01/2011, 16:47
 
Fecha de Ingreso: abril-2004
Mensajes: 107
Antigüedad: 20 años
Puntos: 0
Respuesta: Select en MySQL con tablas relacionadas

Muchas gracias a los dos. Con eso me basta.

¿Y qué diferencia hay entre esa consulta y esta?

SELECT nombrepartida FROM poker_partidas WHERE idpartida = ANY (SELECT iddelapartida FROM poker_partidas_apuntadas WHERE usuario="peral" );
  #5 (permalink)  
Antiguo 11/01/2011, 00:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Select en MySQL con tablas relacionadas

Varuk,
la tuya es más complicada, contiene una subconsulta y no está haciendo uso de los índices de la PK y FK como hacen con INNER JOIN. La que te he propuesto es una consulta estándar para esto que pides. Las bases relacionales basan su poder en esos cruces de tablas cuya consulta más sencilla y primera que se aprende para cruzar dos tablas relacionadas buscando por un parámetro es esta que te he propuesto. Echa un vistazo a algún manual de bases relacionales y de SQL, y verás que es así.

Última edición por jurena; 11/01/2011 a las 01:40

Etiquetas: relacionadas, select, tablas
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 21:38.