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

GROUP BY tomando el ORDER BY

Estas en el tema de GROUP BY tomando el ORDER BY en el foro de Bases de Datos General en Foros del Web. Como hago para que una consulta SQL realize el GROUP BY pero tomando el ORDER BY. Mas especificamente: tengo esta consulta: Código PHP: $dia = ...
  #1 (permalink)  
Antiguo 27/08/2004, 12:43
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
GROUP BY tomando el ORDER BY

Como hago para que una consulta SQL realize el GROUP BY pero tomando el ORDER BY.
Mas especificamente: tengo esta consulta:

Código PHP:
$dia=date("d");
$mes=date("m");
$sql="SELECT jugadores.*, equipos.juega, equipos.nombre as eq FROM jugadores ";
$sql.="LEFT JOIN equipos ON (jugadores.equipo = equipos.id) ";
$sql.="WHERE MONTH(jugadores.nac)='$mes' AND DAYOFMONTH(jugadores.nac)='$dia' ";
$sql.="GROUP BY jugadores.nombre, jugadores.dni ";
$sql.="ORDER BY jugadores.campeonato DESC, equipos.juega DESC";
$sql=mysql_query($sql,$conn); 
que funciona bien, el unico problema es que yo quiero que los "grupos" resultantes tengan el "jugadores.campeonato" mayor, por eso lo ordeno por jugadores.campeonato DESC pero sigue dandome como resultado los grupos con el menor.
¿que estoy haciendo mal?
__________________
oohh... quisiera ser godines!!!
  #2 (permalink)  
Antiguo 28/08/2004, 08:59
 
Fecha de Ingreso: agosto-2003
Mensajes: 448
Antigüedad: 20 años, 8 meses
Puntos: 1
Una pregunta, por que utilizas Group by si no tenés ningúna función de agrupación?, como SUM, AVG, COUNT, etc.
  #3 (permalink)  
Antiguo 30/08/2004, 11:52
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
NOTA DEL AUTOR: notese que mis conocimientos de SQL no son muy amplios...
---------

Uso el GROUP BY porque en algunas ocasiones tengo un jugador mas de una vez y solo necesito el ultimo registro referido a cada jugador. ¿deberia usar algo diferente?
__________________
oohh... quisiera ser godines!!!
  #4 (permalink)  
Antiguo 31/08/2004, 01:41
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Supongo que un jugador no pueda estar a la vez en dos equipos verdad???? y tendrán fecha de alta y de baja??? si es así, utiliza el campo fecha de baja para filtrar, si no es así, la tabla de jugadores, sácala como una subconsulta, agrupada, y luego esta la relacionas con la tabla equipos, será más sencillo sacar lo que necesitas.

Un saludo

Última edición por Teri; 01/09/2004 a las 02:23
  #5 (permalink)  
Antiguo 31/08/2004, 10:17
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
gracias por responder... por desgracia no tengo un campo de fecha de baja... con respecto a lo segundo por uno lado uso MySQL y tengo entendido que no soporta subconsultas y por si esto fuera poco si si aceptara no se como hacerlas

asi que acepto sugerencias...
__________________
oohh... quisiera ser godines!!!
  #6 (permalink)  
Antiguo 01/09/2004, 02:28
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Pero entonces, como sabrías cuál es el último registro de un jugador???

Deberías tener un campo que los diferenciara, si no es así, y todos los datos son iguales, haz lo siguiente


SELECT jugadores.*, equipos.juega, equipos.nombre as eq FROM (SELECT DISTINCT jugadores.* FROM jugadores WHERE MONTH(jugadores.nac)='$mes' AND DAYOFMONTH(jugadores.nac)='$dia'
) jugadores
LEFT JOIN equipos ON (jugadores.equipo = equipos.id)
ORDER BY jugadores.campeonato DESC, equipos.juega DESC


Un saludo
  #7 (permalink)  
Antiguo 01/09/2004, 09:45
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
estube probando el codigo que me pasaste y me da error...

hay dos campos que diferencia al mismo jugador... el primero es "id" que es autonumerico y el segundo es "campeonato". El tema es que hay otros datos que pueden variar de campeonato en campeontao (que son los que no me intereasan en esta consulta) y es por eso que cada jugador es ingresado nuevamente en cada campeonato. yo lo que quiero sacar es el ultimo campeonato disputado por cada jugador...
__________________
oohh... quisiera ser godines!!!
  #8 (permalink)  
Antiguo 02/09/2004, 02:38
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Cuál es el campo que identifica a cada jugador, nombre y apellidos o algo así??? necesitas algún campo para poder agrupar y sacar el mayor id de cada jugador
  #9 (permalink)  
Antiguo 02/09/2004, 10:33
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
la tabla "jugadores" esta compuesta por los siguientes campos:

- id (autonumerico)
- nombre
- equipo
- dni (nos fue imposible logar a tener todos los dni porlo que no nos sirve de mucho)
- nacimiento
- mail
- pass
- campeonato

PD: gracias por las pilas para ayudarme
__________________
oohh... quisiera ser godines!!!
  #10 (permalink)  
Antiguo 03/09/2004, 01:43
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Bueno... más o menos sería algo así....

SELECT jugadores.*, equipos.juega, equipos.nombre as eq FROM (SELECT jugadores.* FROM jugadores INNER JOIN (SELECT Max(Id) AS Id FROM jgadores WHERE MONTH(jugadores.nac)='$mes' AND DAYOFMONTH(jugadores.nac)='$dia' GROUP BY Nombre) J2 ON Jugadores.Id = J2.Id
) jugadores
LEFT JOIN equipos ON (jugadores.equipo = equipos.id)
ORDER BY jugadores.campeonato DESC, equipos.juega DESC


Ya me dirás...
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:58.