MySQL Forums
Forum List  »  Spanish

Consulta con demasiados left join
Posted by: gustavo frank
Date: March 09, 2017 06:29PM

Que tal?. Estoy haciendo una consulta para recuperar datos de 3 tablas, es de un sistema de chat medio sensillo. Tengo 4 tablas Usuarios(id,usuario...) Conversaciones(Id,User1,User2,IdPublicacion) premensaje(Id, IdPropietario, IdMensaje, IdConversacion) mensajes (Id, IdEnvia, Fecha, Texto, Leido). Lo que necesito es recuperar todos los id de las conversaciones de un determinado usuario que puede estar en user1 o user2, el id de publicacion de esa conversacion, los nombres de user1 y user2 y la cantidad de mensajes no leidos. Para eso hago uso de left join. La consulta funciona correctamente y devuelve todos los valores que necesito mi duda es la siguiente: es eficiente esta consulta o alentara mucho el servidor cuando este tenga muchos datos. Esta es la consulta:

SELECT
conversaciones.Id, conversaciones.IdPublicacion, conversaciones.User1, conversaciones.User2, Usuario1.Usuario as Nombre1, Usuario2.Usuario as Nombre2, COUNT(mensajes.Id) as Cantidad
FROM
conversaciones
LEFT JOIN
usuarios Usuario1 ON conversaciones.User1 = Usuario1.Id
LEFT JOIN
usuarios Usuario2 ON conversaciones.User2 = Usuario2.Id
LEFT JOIN
premensajes
ON
conversaciones.Id = premensajes.IdConversacion AND premensajes.IdPropietario = '17'
LEFT JOIN
mensajes
ON
mensajes.Id = premensajes.IdMensaje AND mensajes.Leido = '1' AND mensajes.IdEnvia <> '17'
WHERE
conversaciones.User1 = '17' OR conversaciones.User2 = '17' GROUP BY conversaciones.Id;

Options: ReplyQuote


Subject
Views
Written By
Posted
Consulta con demasiados left join
184
March 09, 2017 06:29PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.