Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/04/2010, 18:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: Ayuda consulta de varias tablas

Hay varios asuntos en esto:
1) Cuando usas funciones agregadas junto a campos no afectados por una función agregada, debe indicarse cuál es el criterio de agrupamiento, es decir, debe usarse GROUP BY.
2) Cuando vas a realizar JOINs sobre diferentes campso de una misma tabla, se la debe invocar por separado en el FROM asignándole alias. No es funcional el OR en ese caso.
3) Si algún valor puede que no exista en el JOIN, debe usarse o LEFT o RIGHT como cláusula del JOIN, según sea la forma de leer las tablas.
4) Cualquier campo que pueda devolver NULL, debe ser conrolado al menos por IFNULL().
5) No se puede usar la coma (,) como sinónimo de JOIN si existen los mismos nombres de campos en más de una tabla. MySQL intentará emparejar todos los campos del mismo nombre, cosa que puede dar resultados erráticos.
6) Usa alias para tablas y campos. Simplifica la lectura.
7) No uses los mismos nombres en las tablas que en los campos contenidos en ella (usuario.usuario es una mala idea). MySQL puede confundir por cuestiones de jerarquía los nombres y asume siempre que el objeto de mayor jerarquía (la base o la tabla) son los invocados.
... Ect., etc.

Prueba con algo así:
Código MySQL:
Ver original
  1.   U.usuario,
  2.   SUM(IFNULL(M1.puntos,0))+ SUM(IFNULL(M2.puntos,0)) PuntosMotos,
  3.   SUM(IFNULL(P1.puntos,0))+ SUM(IFNULL(P2.puntos,0)) PuntosPilotos,
  4.   IFNULL(E.puntos,0) PuntosEquipo
  5.   Usuarios U
  6.   LEFT JOIN Equipos E ON U.equipo= E.codigo
  7.   LEFT JOIN Pilotos P1 ON U.piloto1=P1.numero
  8.   LEFT JOIN Pilotos P1 ON
  9.   LEFT JOIN Motos M1 ON U.moto1= M1.id_moto
  10.   LEFT JOIN Motos M2 ON U.moto1= M2.id_moto
  11.   U.id_partida = $p
  12. GROUP BY U.usuario;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)