Ver Mensaje Individual
  #5 (permalink)  
Antiguo 17/12/2008, 12:44
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: como puedo hacer esta consulta

Pakillo,
estoy de acuerdo con Trumpetero. En mi opinión, la mejor solución implica esto:
Tablas:

equipos
id_equipo (PK)
equipo

pilotos
id_piloto (PK)
piloto
refidequipo (FK)
edad
...

carreras
id_carrera (PK)
carrera
fecha
temporada
...

clasificaciones
id_clasificaciones (PK)
refidcarrera(FK)
refidpiloto (FK)
refidposicion (FK)


puntosposicion
id_posicion (PK)
puntos int

Naturalmente, puedes añadir otras e incluso eliminar la tabla puntosposicion y añadir en clasificaciones un campo puntos, como te recomendaba trumpetero.


Por cada uno de los 8 primeros de cada carrera insertas un registro en la tabla clasificaciones con los datos indicados. Puedes poner las posiciones de todos los que terminen, aunque ello no conlleve puntos (conviene guardar datos que luego puedas presentar en la estadística), pues no es lo mismo terminar el noveno que el undécimo. Naturalmente, añades campos en la tabla puntosposicion con 0 puntos para esas otras clasificaciones. E incluso añadir un valor para los que no terminen, aunque eso lo podrías sacar de otro modo.

Luego, por ponerte un ejemplo, una consulta como esta de más abajo te sacará la clasificación de los que intervinieron en la segunda carrera. En el where puedes poner los datos que quieras, año, temporada, etc. O no poner nada y te sumará el total.
Además, luego podrás casi todo lo que se te ocurra con los datos. He puesto la tabla de puntosposicion para el caso de que esos puntos sean siempre los mismos para cada posición, pero, como te he dicho, puedes incluir los puntos en la tabla clasificaciones y evitarte esta tabla.


Código sql:
Ver original
  1. SELECT p.piloto, SUM( pp.puntos ) puntos
  2. FROM `clasificaciones` cl
  3. INNER JOIN pilotos p ON cl.refidpiloto = p.id_piloto
  4. INNER JOIN carreras ca ON cl.refidcarrera = ca.id_carrera
  5. INNER JOIN puntosposicion pp ON pp.id_posicion = cl.refidposicion
  6. WHERE ca.id_carrera =2
  7. GROUP BY p.id_piloto
  8. ORDER BY puntos DESC

Última edición por jurena; 18/12/2008 a las 03:55