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

Ayuda consulta de varias tablas

Estas en el tema de Ayuda consulta de varias tablas en el foro de Mysql en Foros del Web. Ola tengo un problema y esque hago una consulta en la que cojo datos de varias tablas y hago una suma de algunos de ellos ...
  #1 (permalink)  
Antiguo 30/04/2010, 15:45
 
Fecha de Ingreso: abril-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Ayuda consulta de varias tablas

Ola tengo un problema y esque hago una consulta en la que cojo datos de varias tablas y hago una suma de algunos de ellos y si los puntos por ejemplo total de la suma deberian ser 15 me da 30, siempre el doble, es como si me cojiera la misma fila dos veces y nose xq es.
Soy un poco novatillo, os adjunto el codigo fuente y gracias de antemano.

$consulta_part = mysql_query("SELECT id_partida FROM Usuarios WHERE usuario='$user'");
$row = mysql_fetch_assoc($consulta_part);
$p=$row['id_partida'];
$consulta = "SELECT Usuarios.usuario,SUM(Motos.puntos),SUM(Pilotos.pun tos),Equipos.puntos FROM Usuarios,Motos,Equipos,Pilotos WHERE Usuarios.equipo=Equipos.codigo and Usuarios.id_partida=$p and (Usuarios.moto1=Motos.id_moto or Usuarios.moto2=Motos.id_moto) and (Usuarios.piloto1=Pilotos.numero or Usuarios.piloto2=Pilotos.numero)";
  #2 (permalink)  
Antiguo 30/04/2010, 18:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 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)
  #3 (permalink)  
Antiguo 05/05/2010, 15:44
 
Fecha de Ingreso: abril-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda consulta de varias tablas

Gracias por responder xo con tu consulta me da este error:

Error en consulta:Not unique table/alias: 'P1'

e estudiado algo d SQL en el modulo q hice pero nunca vi un ifnull x ay jeje bueno podrias revisarlo a ver?? puse esto tal cual:

Código MySQL:
Ver original
  1. $consulta =  "SELECT U.usuario,SUM(IFNULL(M1.puntos,0))+ SUM(IFNULL(M2.puntos,0))
  2. PuntosMotos,SUM(IFNULL(P1.puntos,0))+ SUM(IFNULL    (P2.puntos,0)) PuntosPilotos,IFNULL(E.puntos,0)
  3. PuntosEquipo FROM Usuarios U LEFT JOIN Equipos E ON U.equipo= E.codigo LEFT JOIN Pilotos P1 ON
  4. U.piloto1=P1.numero LEFT JOIN Pilotos P1 ON LEFT JOIN Motos M1 ON U.moto1= M1.id_moto LEFT
  5. JOIN Motos M2 ON U.moto1= M2.id_moto WHERE U.id_partida = $p
  6.    GROUP BY U.usuario";
  7.  
  8.         $resultado = mysql_query ($consulta) or die ("Error en consulta:".mysql_error());
  #4 (permalink)  
Antiguo 05/05/2010, 16:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda consulta de varias tablas

Srguro fue un error de digitación de gnzsoloyo

Código SQL:
Ver original
  1. SELECT
  2.   U.usuario,
  3.   SUM(IFNULL(M1.puntos,0))+ SUM(IFNULL(M2.puntos,0)) PuntosMotos,
  4.   SUM(IFNULL(P1.puntos,0))+ SUM(IFNULL(P2.puntos,0)) PuntosPilotos,
  5.   IFNULL(E.puntos,0) PuntosEquipo
  6. FROM
  7.   Usuarios U
  8.   LEFT JOIN Equipos E ON U.equipo= E.codigo
  9.   LEFT JOIN Pilotos P1 ON U.piloto1=P1.numero
  10.   LEFT JOIN Pilotos P2 ON U.piloto1=P2.numero
  11.   LEFT JOIN Motos M1 ON U.moto1= M1.id_moto
  12.   LEFT JOIN Motos M2 ON U.moto1= M2.id_moto
  13. WHERE
  14.   U.id_partida = $p
  15. GROUP BY U.usuario;

Pero se nota que ni analizaste la consulta que te dieron.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 07/05/2010, 05:58
 
Fecha de Ingreso: abril-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda consulta de varias tablas

si analize se q pone alias con los nombres a todo despues xo esq nunka e usado ni el NULL ni el LEFT JOIN siento ser un ignorante huesos52
  #6 (permalink)  
Antiguo 07/05/2010, 06:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda consulta de varias tablas

Sorry por el error. Creo que lo escribí a las apuradas (responder mientras tenemos cámaras observando en la empresa se hace difícil).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/05/2010, 04:08
 
Fecha de Ingreso: abril-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda consulta de varias tablas

aora me sale un clasificado con 400 puntos y el otro ninguno jeje da iwal gracias d todas formas gnzsoloyo
  #8 (permalink)  
Antiguo 09/05/2010, 19:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda consulta de varias tablas

que tal amigos del foro necesito ayuda porfas para realizar una base de datos con 2 tablas y que en la consulta me muestre los registros de los campos siguientes:
numero de control , alumno, apellidos,semestre, materia, calificacion de la materia que se seleccione
por supuesto los campos deben ir repartidos en las 2 tablas y la consulta que una a las dos
ayudenme porfavor ya estuve intentado demasiado pero no lo he logrado espero sus respuestas.

Etiquetas: tablas
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 08:49.