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

Elegir el mayor entre varios campos de una misma fila

Estas en el tema de Elegir el mayor entre varios campos de una misma fila en el foro de Mysql en Foros del Web. Buenos días. Traigo una pregunta que estoy seguro de que o es facilisima de resolver o no se puede hacer tal como la planteo. CONTEXTO: ...
  #1 (permalink)  
Antiguo 09/04/2012, 03:29
liranan
Invitado
 
Mensajes: n/a
Puntos:
Elegir el mayor entre varios campos de una misma fila

Buenos días.

Traigo una pregunta que estoy seguro de que o es facilisima de resolver o no se puede hacer tal como la planteo.

CONTEXTO: en una base de datos almaceno la puntuación de varios jugadores que han jugado al mismo juego. Hay un campo para cada uno de ellos. Un ejemplo de una fila sería así:

juego: snake, jugador1:pepe, jugador2:juan, jugador3:antonio, puntuacion1: 1000, puntuacion2: 500, puntuacion3: 750, númeroDePartida: 100

PREGUNTA: ¿es posible saber quién hizo la mayor puntuación en todas las partidas que se han jugado? Es decir, comparando no sólo entre todos los registros, sino a la vez dentro de cada registro entre los campos de puntuacion1, puntuacion2 y puntuacion3?

Gracias por vuestras respuestas!
Gonzalo.
  #2 (permalink)  
Antiguo 09/04/2012, 08:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Elegir el mayor entre varios campos de una misma fila

Hola liranan:

En primer lugar habría que comentar que creo que tu modelo de BD no es el adecuado. Lo correcto hubiera sido un modelo con tres tablas:

1. Jugadores
2. Partidas
3. Jugadores por partida

De esta manera la consulta que planteas hubiera sido muy sencilla, sin embargo con la tabla como la tienes no es tan trivial como podrías suponer.

Para obtener los puntos de un jugador en específico, tendrías que sumar aquellos donde aparezca el jugador como jugador 1 más aquellos donde aparezca como jugador 2 más aquellos donde aparezca como jugador 3. Esto puedes hacerlo de varias maneras, una sería con UNION's:

Código MySQL:
Ver original
  1. select sum(puntos) total from
  2. (
  3. Select puntuacion1 puntos from tabla where jugador1 = 'pepe'
  4. Select puntuacion2 puntos from tabla where jugador2 = 'pepe'
  5. Select puntuacion3 puntos from tabla where jugador3 = 'pepe'
  6. ) T

Otra opción sería con tres subconsultas en el select:

Código MySQL:
Ver original
  1. (select sum(puntuacion1) from tabla where jugador1 = 'pepe') +
  2. (select sum(puntuacion2) from tabla where jugador2 = 'pepe') +
  3. (select sum(puntuacion3) from tabla where jugador3 = 'pepe')

Obviamente que tendrías que considerar a todos los jugadores, en el ejemplo sólo considero a 'pepe'. una vez haciendo esto podrías utilizar la función max para traer el de máxima puntuacíon o podrías ordenar por el total de puntos y traer sólo el primero (aunque tendrías problemas si existe un empate en primer lugar, pues te arrojaría sólo un registro).

Si tienes oportunidad cambia tu modelo de datos. Si no puedes cambiar el modelo de datos, intenta hacer la consulta con lo que te pongo de ejemplo y si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a afinar la consulta.

Saludos
Leo.
  #3 (permalink)  
Antiguo 09/04/2012, 09:03
liranan
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Elegir el mayor entre varios campos de una misma fila

Muchas gracias por tu respuesta, Leo.

En verdad, mi base de datos tiene dos tablas: partidas y usuarios (bueno, tiene más, como juegos, pero no entrarían en esta consulta).
El error ha sido mío por no mencionarlo, lo cual dificulta que me podáis ayudar.

La solución que estaba usando ahora, era hacer varias consultas, una por cada jugador, ordenarlas por la puntuación y tomar el primer registro de cada uno; luego compararlas todas y mostrar el que fuera más alto.

Por funcionar, funciona, pero sospecho que no debe ser la mejor manera. Estuve investigando el tema de MAX pero no me quedó muy claro.

Puedo cambiar cualquier cosa de la base de datos, solo estoy empezando la página, pero tendría que hacerlo mañana en el trabajo, jeje.

Etiquetas: campos, elegir, fila, mayor, registros
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 11:09.