Foros del Web » Programando para Internet » PHP »

sumar campos mysql y mostrar individualmente

Estas en el tema de sumar campos mysql y mostrar individualmente en el foro de PHP en Foros del Web. Buenas, Estoy intentando hacer que para cada jugador muestre los goles totales de la temporada (para ello debe sumar los goles de las diferentes competiciones ...
  #1 (permalink)  
Antiguo 10/10/2011, 17:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
sumar campos mysql y mostrar individualmente

Buenas,
Estoy intentando hacer que para cada jugador muestre los goles totales de la temporada (para ello debe sumar los goles de las diferentes competiciones que está jugando) y me muestre los goles totales de cada jugador ordenado por goleador.

Tengo este código hecho que suma los goles totales del equipo, pero no consigo hacer que los sume individualmente por jugadores.

Código PHP:
$champ mysql_query("SELECT DISTINCT C.TEMPORADA, C.TIPO, J.NOMBRE, J.APELLIDO, SUM(C.GOLES)
FROM CAMPEONATO C, JUGADORES J
WHERE J.DORSAL=C.DORSAL AND TEMPORADA=(SELECT MAX(TEMPORADA) FROM CAMPEONATO)
ORDER BY C.GOLES DESC"
$link);


while (
$row = @mysql_fetch_row($champ)){
echo 
$row[4];
}

    
mysql_close($link); 

Cualquier ayuda será bienvenida.
Gracias de antemano.
  #2 (permalink)  
Antiguo 11/10/2011, 05:39
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: sumar campos mysql y mostrar individualmente

Creo que el error que estas cometiendo es que al darle el alias a las tablas no le estas colocando el as correspondiente, es decir jugadores as j y campeonato as c. Ademas yo siempre que realizo una consulta sql la termino con un punto y coma, es decir:

$consulta="SELECT * FROM tabla;";
$hacerconsulta=mysql_query($consulta,$enlace);

y por ultimo no entiendo para que estas haciendo ese while, no lo entiendo. Pues nada, espero que con estas ayudas puedas sacar las consultas.

p.s. Primero prueba haciendo las consultas sencillas y mira si te da algun resultado y así se descarta que este mal escrita la sintaxis sql y luego si se prueba con la consulta que deseas que es mas completa y larga. Si pruebas de chorro toda la sintaxis sin saber si la subconsulta esta bien hecha puede estar generando el error.
  #3 (permalink)  
Antiguo 11/10/2011, 08:53
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: sumar campos mysql y mostrar individualmente

Cita:
Iniciado por cuasatar Ver Mensaje
Creo que el error que estas cometiendo es que al darle el alias a las tablas no le estas colocando el as correspondiente, es decir jugadores as j y campeonato as c. Ademas yo siempre que realizo una consulta sql la termino con un punto y coma, es decir:

$consulta="SELECT * FROM tabla;";
$hacerconsulta=mysql_query($consulta,$enlace);

y por ultimo no entiendo para que estas haciendo ese while, no lo entiendo. Pues nada, espero que con estas ayudas puedas sacar las consultas.

p.s. Primero prueba haciendo las consultas sencillas y mira si te da algun resultado y así se descarta que este mal escrita la sintaxis sql y luego si se prueba con la consulta que deseas que es mas completa y larga. Si pruebas de chorro toda la sintaxis sin saber si la subconsulta esta bien hecha puede estar generando el error.
Esta corrección esta mal, el AS no es necesario en las consultas, tampoco el punto y coma interno. Cambiar eso no va a solucionar nada. Lo que si te aconsejo, es que no utilices NUNCA @ es una mala practica no mostrar errores de esa forma.

Un group by con un SUM pareciera que podría ayudar a tu problema, pero realmente no conozco la estructura de tu tabla.

Saludos
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 11/10/2011, 09:35
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Gracias por los comentarios, os explico un poco mejor.

El while ese es para que me imprima por pantalla los goles de cada jugador.
Si en lugar de SUM(C.GOLES) pongo solamente C.GOLES me muestra por ejemplo Jugador A lleva 5 en Competición 1, después Jugador B lleva 3 goles en Competición 1, después vuelve a poner Jugador A lleva 2 goles en Competición 2, etc. Es decir, me muestra de cada jugador los goles de cada competición.
En cambio lo que quiero es que me ponga que el jugador A lleva X goles en el total de competiciones, el Jugador B lleva Y goles en el total de competiciones, etc.

Lo del @ ciertamente no me haría falta aquí, venía de un código antiguo y no la quité.
  #5 (permalink)  
Antiguo 11/10/2011, 09:38
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: sumar campos mysql y mostrar individualmente

muéstranos la estructura de la tabla
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #6 (permalink)  
Antiguo 11/10/2011, 09:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 35
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: sumar campos mysql y mostrar individualmente

Hola! Como bien dijeron, no sabemos como está compuesta la estructura de tus tablas y no sabemos como guardas la información. Pero a simple vista e imaginando, podría decir que el problema es en la búsqueda (obviamente...). Estás haciendo:
Código PHP:
WHERE J.DORSAL C.DORSAL 
El tema es que los dorsales son los números de los jugadores que se repiten en muchos equipos!

O estoy equivocado? Explicanos un poco más por favor.

Y lo mejor sería hacer un limit 10 para traer la tabla de los 10 más goleadores.

Y mostrando: Jugador: Apellido, Nombre - Goles: Cantidad.

Código PHP:
$champ mysql_query("SELECT DISTINCT C.TEMPORADA, C.TIPO, J.NOMBRE, J.APELLIDO, SUM(C.GOLES) 
FROM CAMPEONATO C, JUGADORES J 
WHERE J.DORSAL=C.DORSAL AND TEMPORADA=(SELECT MAX(TEMPORADA) FROM CAMPEONATO) 
ORDER BY C.GOLES DESC [B]limit 10[/B];"
$link); 


while (
$row = @mysql_fetch_row($champ)){ 
echo 
"Jugador: ".$row[3].",".$row[2]." - Goles: ".$row[4]."<br>"

  #7 (permalink)  
Antiguo 11/10/2011, 09:47
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

TABLA CAMPEONATO:
Campo Tipo
TEMPORADA int(11) (p.ej: 2008, 2009, 2010, 2011)
TIPO varchar(10) (p.ej: Amistoso, Copa, Liga)
DORSAL int(2)
GOLES int(11)
ASISTENCIAS int(11)
TARJ_AMAR int(11)
TARJ_ROJA int(11)

TABLA JUGADORES
Campo Tipo
DORSAL int(11)
NOMBRE varchar(10)
APELLIDO varchar(15)
  #8 (permalink)  
Antiguo 11/10/2011, 14:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Los datos que hay en la tabla son sólo de 1 equipo tinthenet.
  #9 (permalink)  
Antiguo 11/10/2011, 15:00
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Un ejemplo de la tabla con 3 jugadores en 2 competiciones diferentes:

TABLA CAMPEONATO:
TEMPORADA TIPO DORSAL GOLES
2012 LIGA 21 1
2012 LIGA 7 2
2012 LIGA 6 0
2012 COPA 6 3
2012 COPA 21 1
2012 COPA 7 6


TABLA JUGADORES
DORSAL NOMBRE APELLIDO
6 NOMBRE1 APELLIDO1
7 NOMBRE2 APELLIDO2
21 NOMBRE3 APELLIDO3

El resultado debería ser:
7- NOMBRE2 APELLIDO2, 8 goles
6- NOMBRE1 APELLIDO1, 3 goles
21- NOMBRE3 APELLIDO3, 2 goles
  #10 (permalink)  
Antiguo 12/10/2011, 07:41
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Cita:
Iniciado por tinthenet Ver Mensaje
Código PHP:
$champ mysql_query("SELECT DISTINCT C.TEMPORADA, C.TIPO, J.NOMBRE, J.APELLIDO, SUM(C.GOLES) 
FROM CAMPEONATO C, JUGADORES J 
WHERE J.DORSAL=C.DORSAL AND TEMPORADA=(SELECT MAX(TEMPORADA) FROM CAMPEONATO) 
ORDER BY C.GOLES DESC [B]limit 10[/B];"
$link); 


while (
$row = @mysql_fetch_row($champ)){ 
echo 
"Jugador: ".$row[3].",".$row[2]." - Goles: ".$row[4]."<br>"

Gracias por el comentario tinthenet pero realmente no cambia nada este código, porque lo que hace es que muestra sólo 1 jugador con el total de goles del resto de jugadores:
Jugador: APELLIDO2,NOMBRE2 - Goles: 13
Incluso creo que coge el nombre del 1r jugador que encuentra, ni tan siquiera es el máximo goleador.

Espero que haya quedado algo más claro lo que quiero lograr.
  #11 (permalink)  
Antiguo 12/10/2011, 07:47
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 4 meses
Puntos: 69
Respuesta: sumar campos mysql y mostrar individualmente

Yo creo que es asi :

Código MySQL:
Ver original
  1. SELECT j.dorsal, j.nombre, j.apellido, c.goles
  2. FROM jugadores j LEFT join campeonato c USING (dorsal)
  3. WHERE c.temporada = (SELECT MAX(temporada) from campeonato)
  4. AND c.goles IS NOT NULL;

Con esto te debería funcionar.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #12 (permalink)  
Antiguo 12/10/2011, 08:04
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Hola Webstudio, gracias por la ayuda pero algo no funciona, no muestra nada directamente...
  #13 (permalink)  
Antiguo 12/10/2011, 08:46
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 4 meses
Puntos: 69
Respuesta: sumar campos mysql y mostrar individualmente

Storage, antes de copiar simplemente lo que puse, te pusiste a fijar la estructura del SQL que te paso?
Conocés un JOIN? Estás usando la QUery en algún cliente de MYSQL que te tire alguna respuesta?
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #14 (permalink)  
Antiguo 12/10/2011, 19:04
 
Fecha de Ingreso: septiembre-2008
Mensajes: 35
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: sumar campos mysql y mostrar individualmente

Hola, entendí bien. Probá con esto:

SELECT C.TEMPORADA, C.TIPO, J.NOMBRE, J.APELLIDO, SUM(C.GOLES)
FROM CAMPEONATO C, JUGADORES J
WHERE J.DORSAL=C.DORSAL AND TEMPORADA=(SELECT MAX(TEMPORADA) FROM CAMPEONATO)
ORDER BY C.GOLES DESC limit 10;
  #15 (permalink)  
Antiguo 12/10/2011, 19:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Cita:
Iniciado por Webstudio Ver Mensaje
Storage, antes de copiar simplemente lo que puse, te pusiste a fijar la estructura del SQL que te paso?
Conocés un JOIN? Estás usando la QUery en algún cliente de MYSQL que te tire alguna respuesta?
No lo conocía antes, ciertamente. Por lo que vi lo que hace es que coge los datos de la tabla izquierda (jugadores) y busca el mismo campo en la tabla derecha (campeonato) y con el using le dices los campos que coinciden (dorsal).
Pero con el código que pusiste no hace la suma de los goles de las competiciones de cada jugador tampoco.
Si no entendí te estaría agradecido que me corrigieras, así algo más que aprendo.


Cita:
Iniciado por tinthenet Ver Mensaje
Hola, entendí bien. Probá con esto:

SELECT C.TEMPORADA, C.TIPO, J.NOMBRE, J.APELLIDO, SUM(C.GOLES)
FROM CAMPEONATO C, JUGADORES J
WHERE J.DORSAL=C.DORSAL AND TEMPORADA=(SELECT MAX(TEMPORADA) FROM CAMPEONATO)
ORDER BY C.GOLES DESC limit 10;
En este caso seguimos con el mismo problema, suma todos los goles de todos los jugadores en un mismo jugador, pero no logra mostrar los goles totales por cada jugador. No alcanzo a ver qué modificaste :S
  #16 (permalink)  
Antiguo 13/10/2011, 17:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: sumar campos mysql y mostrar individualmente

Para simplificar haré que sólo existe una tabla llamada CAMPEONATO y ahí están todos los datos.

A ver si a alguien se le ocurre algo con eso...

Etiquetas: campos, mysql
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 19:53.