2011-01-10 9 views
5

tengo un problema al unir tres tablas en mysql.¿Cómo se puede unir varias tablas de una a varias en mysql?

digamos que tenemos una tabla llamada posts que guardo mis entradas en él, tengo una tabla llamada likes el que almaceno de user_id y de post_id y una tercera tabla denominada comments el que almaceno de user_id y de post_id y el texto del comentario en ella .

necesito una consulta que obtiene la lista de mis entradas, con número de gustos y comentarios para cada entrada.

Im usando esta consulta:

SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes 
FROM `posts` 
LEFT OUTER JOIN comments ON comments.post_id = posts.id 
LEFT OUTER JOIN likes ON likes.post_id = posts.id 
GROUP BY posts.id 

pero hay un problema con esta consulta, si los comentarios están vacíos para un artículo, le gusta recuento está bien, pero digamos que si una entrada tiene 2 comentarios y 4 Me gusta, tanto total_comments como total_likes serán "8", lo que significa que mysql los multiplica. Estoy confundido y no sé qué debería hacer.

Gracias de advace.

Respuesta

7

Uso count(distinct comments.id) y count(distinct likes.id), proporcionan estos identificadores son únicos.

+0

Gracias, funcionó como un encanto. – Sallar

4

Bueno esta es una manera de acercarse a ella (suponiendo MySQL permite tablas derivadas):

SELECT posts.id, comments.total_comments, likes.total_likes 
FROM `posts` 
LEFT OUTER JOIN (select post_id, count(id) as total_comments from comments) comments 
    ON comments.post_id = posts.id 
LEFT OUTER JOIN (select post_id, count(id) as total_likes from likes) likes 
    ON likes.post_id = posts.id 

También es posible usar subconsultas correlacionadas. Es posible que desee una declaración del caso en la cuenta para poner en un 0 cuando no hay registros coincidentes.

Probemos una consulta correlacionada:

SELECT posts.id, 
(select count(Id) from comments where post_id = posts.id) as total_comments, 
(select count(Id) from likes where post_id = posts.id) as total_likes 
FROM `posts` 
+0

gracias, pero esta consulta devueltos 12 gustos y 2 Comentarios para primer registro (tiene 4 gustos y 2 comentarios), y NULL para todas las demás filas. – Sallar

+0

se parece a la ruta consulta correlacionada podría ser mejor – HLGEM

+0

no he oído nada acerca de ellos. – Sallar

Cuestiones relacionadas