2017-11-12 5 views
0

postgresqlでクエリを作成して、「投稿」のコメント、好き嫌い、嫌いなものを取り出そうとしています。現在のところ、クエリはミスカウントであり、両方のコメント/お気に入りが同じ投稿に対して発生した場合に余分な値を与えるようです。Postgresql Multiテーブル数:好き嫌い、ソーシャルメディアスタイルアプリのコメント

SQLFiddleがここにあります:http://sqlfiddle.com/#!17/e0f51/1

は現在、結果は次のようになります。

postid postbody  comment_count dislikes likes 
1  Test Post A 1    0   0 
2  Test Post B 2    2   4 
3  Test Post C 0    0   0 
4  Test Post D 2    4   2 
5  Test Post E 0    1   3 

しかし、理想的に次のようになります。

postid postbody  comment_count dislikes likes 
1  Test Post A 1    0   0 
2  Test Post B 2    1   2 
3  Test Post C 0    0   0 
4  Test Post D 2    2   1 
5  Test Post E 0    1   3 

答えて

1

がある場合に問題が発生します1件以上のコメント、好き嫌いには受け取ったコメントの数が乗算されます。このラウンド

最良の方法は、巣に似ている/サブクエリに嫌いではなくインクルードが参加する...

理にかなって
SELECT posts.postid, posts.postbody, 
    COUNT(DISTINCT comments.commentid) AS comment_count, 
    (SELECT COUNT(nullif(postlikes.vote,true)) FROM postlikes WHERE postlikes.postid=posts.postid) AS dislikes, 
    (SELECT COUNT(nullif(postlikes.vote,false))FROM postlikes WHERE postlikes.postid=posts.postid) AS likes 
    FROM posts 
    LEFT JOIN comments ON comments.postid=posts.postid 
    GROUP BY posts.postid; 
+0

、ありがとう!倍数がどこから来ているのか分かりにくい時がありました。私は、サブクエリを気にしない、これは完全に動作するようだ。感謝します! –

関連する問題