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

[SOLUCIONADO] Totalmente perdido con una consulta

Estas en el tema de Totalmente perdido con una consulta en el foro de Mysql en Foros del Web. Buenas noches. Llevo toda la tarde detras de una consulta y tengo la cabeza chamuscada ya, asi que voy a molestaros un poco a ver ...
  #1 (permalink)  
Antiguo 30/01/2013, 14:33
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 13 años
Puntos: 2
Exclamación Totalmente perdido con una consulta

Buenas noches.

Llevo toda la tarde detras de una consulta y tengo la cabeza chamuscada ya, asi que voy a molestaros un poco a ver si podeis ayudarme.

Tengo una tabla con un usuario:

usuario_web(id_user,pass,mail,nombre)

Otra con mensajes privados:

user_private_message(id_user,Id_mp,visto

y otra con mensajes de perfil

mensaje_perfil(Id_mensaje,user_destino,texto,fecha,visto)

Lo que quiero basicamente, (ademas de hacerlo tambien para mas tablas pero con conseguirlo para estas creo que seria capaz de seguir con ello) sacar de varias tablas valores.

En este caso, me gustaria sacar el email y el nombre del usuario_web, el numero de los mensajes privados que esten asociados a el (id_user='nombreusuario' y ademas no esten vistos visto=0 y lo mismo para los mensajes de perfil sacar la cantidad de ellos asociados al usuario y no vistos

El problema me viene por que una vez que por ejemplo esta consulta:

Código MySQL:
Ver original
  1. SELECT UW.ID_FACEBOOK,UW.EXPERIENCIA,UW.AVATAR,UW.JUGANDO,UW.IDIOMA_PREFERIDO,
  2. COUNT(MSG.ID_MENSAJE) AS NUM_MENSAJES,
  3. COUNT(MP.ID_MP) AS NUM_MP
  4. FROM USUARIO_WEB UW LEFT JOIN MENSAJE_PERFIL MSG ON UW.ID_USER=MSG.USER_DESTINO LEFT JOIN USER_PRIVATE_MESSAGE MP ON UW.ID_USER=MP.ID_USER
  5. WHERE UW.ID_USER='XUTURK'  AND MSG.VISTO='0' AND MP.VISTO='1'
Y si es MP='1' me saca en NUM_MP y NUM_MENSAJES 1, esto esta bien, pero si pongo MP='0' me saca bien que NUM_MP es 0 pero me pone a 0 el MSG, creo que esto tiene su logica en el join que esta mal hecho, creo que deberia utilizar varias consultas, pero no se me ocurre como hacerlo para que todo esto me quede en una unica devolucion de datos.

Agradeceria mucho vuestra ayuda.

Un saludo.

Última edición por gnzsoloyo; 31/01/2013 a las 05:10 Razón: SQL mal etiquetado
  #2 (permalink)  
Antiguo 31/01/2013, 01:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 13 años
Puntos: 2
Respuesta: Totalmente perdido con una consulta

Me acabo de dar cuenta que el problema viene en el where, que logicamente si no se cumple la condicion de visto, como solo esta afectando a una fila, no sacara el dato anterior(aunque creo que no deberia sacar tampoco el resto) no habria alguna forma de filtrar ese registro antes de hacer el join? De esta manera creo que se evitaria hacerlo en el where y conseguiria lo que quiero. Un saludo
  #3 (permalink)  
Antiguo 31/01/2013, 05:16
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: Totalmente perdido con una consulta

Código MySQL:
Ver original
  1.      UW.ID_FACEBOOK,
  2.      UW.EXPERIENCIA,
  3.      UW.AVATAR,
  4.      UW.JUGANDO,
  5.      UW.IDIOMA_PREFERIDO,
  6.      COUNT(MSG.ID_MENSAJE) NUM_MENSAJES,
  7.      COUNT(MP.ID_MP) AS NUM_MP
  8.      USUARIO_WEB UW
  9.      LEFT JOIN MENSAJE_PERFIL MSG ON UW.ID_USER=MSG.USER_DESTINO
  10.      LEFT JOIN USER_PRIVATE_MESSAGE MP ON UW.ID_USER=MP.ID_USER
  11.      UW.ID_USER='XUTURK'
  12.      AND MSG.VISTO=0
  13.      AND MP.VISTO=1
Cita:
aunque creo que no deberia sacar tampoco el resto
Te saca el resto porque estás usando LEFT JOIN.
El LEFT JOIN devuelve todo lo de la tabla a la izquierda, tenga o no coincidencias con la de la derecha. Como estás cruzando las tres sacará de cada una de las dos de la derecha lo que coincida o no, sin importar si entre si tienen coincidencias.
En definitiva, puedes explicar qué es lo que quieres obtener?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 01/02/2013, 01:43
 
Fecha de Ingreso: mayo-2011
Mensajes: 74
Antigüedad: 13 años
Puntos: 2
Respuesta: Totalmente perdido con una consulta

Gracias por la respuesta, pero no me sirve, como digo quiero por decirlo de alguna manera que los datos que me devuelve no tengan que ver con un where global, ya he conseguido hacerlo anidando consultas en los joins de manera que no haga join a una tabla si no a lo que devuelve otra consulta filtrada, y me funciona perfectamente, imagino que seguramente habria una forma mas eficaz, pero de momento creo que me vale con esto.

Muchas gracias.

Etiquetas: join, perdido, select, tabla, totalmente
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 21:36.