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

MYSQL y PHP - Consulta y muestra de varias tablas

Estas en el tema de MYSQL y PHP - Consulta y muestra de varias tablas en el foro de Mysql en Foros del Web. Buenos días. El problema que tengo se puede resumir de la siguiente manera: En una página de juegos donde se puede apostar contra otros usuarios ...
  #1 (permalink)  
Antiguo 12/09/2012, 06:42
liranan
Invitado
 
Mensajes: n/a
Puntos:
MYSQL y PHP - Consulta y muestra de varias tablas

Buenos días.

El problema que tengo se puede resumir de la siguiente manera:

En una página de juegos donde se puede apostar contra otros usuarios debo mostrar una lista con todas las partidas abiertas (es decir, que no se han finalizado) y quiénes están apuntados a esa partida.

Ahora, mis tablas:

PARTIDAS
-codigoPartida
-partidaTerminada (es = '0' si no se ha finalizado la partida)
-apuesta
-fecha
-etc.

PUNTUACIONES
-idPartida (se enlaza con 'codigoPartida')
-idUsuario (se enlaza con 'nickname')
-idJuego
-puntuacion
-etc.

USUARIOS
-nickname (se enlaza con 'idUsuario')
-avatar
-etc.

Como podéis ver, lo tengo dividido en tres tablas. Hay más, y cada una tiene más campos, pero solo voy a comentaros lo que considero relevante para la consulta.

La tabla PARTIDAS crea un registro nuevo cada vez que un usuario crea una nueva partida, a la vez, se creará un nuevo registro en la tabla PUNTUACIONES cada vez que un usuario se una a una partida anteriormente creada.

Todo funciona perfectamente, excepto a la hora de mostrarlo por pantalla, que es donde me pierdo irremediablemente.

La idea es que la consulta (y la tabla en php) muestre:

- Una sola fila (<tr>) por cada codigoPartida diferente de la tabla PARTIDAS
- Dentro de esa fila, una celda (<td>) rellena con los avatares y nombres de cada uno de los usuarios que se hayan unido a dicha partida.

Por lo tanto, lo que estoy intentando es hacer una triple consulta, más o menos así:

Código SQL:
Ver original
  1. SELECT * FROM ((partidas p INNER JOIN puntuaciones pu ON p.codigoPartida = pu.idPartida) INNER JOIN usuarios u ON pu.idUsuario = u.nickname) WHERE p.partidaTerminada ='0' ORDER BY p.codigoPartida DESC

El código funciona, me devuelve todos los usuarios que cumplen las condiciones, pero al mostrarlo por pantalla no logro que todos los que tienen un mismo "codigoPartida" aparezcan en la misma fila.
Suena estúpido y a lo mejor lo es, pero yo ya no sé cómo intentarlo.

Gracias de antemano!
Gonzalo.
  #2 (permalink)  
Antiguo 12/09/2012, 07:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: MYSQL y PHP - Consulta y muestra de varias tablas

Eso no es un problema que tengas que resolver necesariamente con la base de datos. Podrías usar GROUP_CONCAT(u.nickname) jugadores agrupando por p.codigoPartida, pero siempre es mejor hacerlo con programación y un poco de html.
  #3 (permalink)  
Antiguo 13/09/2012, 01:56
liranan
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: MYSQL y PHP - Consulta y muestra de varias tablas

Muchísimas gracias, Jurena.

Ya ves, no tenía ni idea de que existiera algo llamado GROUP_CONCAT, hasta ahí llega mi ignorancia, jeje.
El resultado ha quedado perfecto, lo dejo por aquí por si alguien llegara a tener un problema similar.

Código PHP:
$select mysql_query("SELECT *, GROUP_CONCAT(u.avatar) as avatares
     FROM ((partidas p INNER JOIN puntuaciones pu ON p.codigoPartida = pu.idPartida) INNER JOIN usuarios u ON pu.idUsuario = u.nickname) 
     WHERE p.partidaTerminada ='0' GROUP BY p.codigoPartida ORDER BY p.codigoPartida DESC"
);

while(
$row=mysql_fetch_array($selectMYSQL_ASSOC)){
        
$avatares explode(","$row['avatares']);
                for(
$i 0$i count($avatares); $i++){
            echo 
"<img src='".$avatares[$i]."' alt='Avatar' border='0''/>";
        }

Lo que hace este código es agrupar todos los registros de la misma partida, guardando en un array todos los avatares, los cuales posteriormente se pueden mostrar haciendo un explode al array y mostrándolo con un bucle for de toda la vida.

GRACIAS!

Etiquetas: join, juegos, subconsulta, 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 06:34.