2016-04-30 10 views
0

すべての投稿と、閲覧回数、投稿数を返すクエリです。問題は、それが原因で他の重複を返されMysql join distinct

 SELECT count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog` 
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id` 
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id` 
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id` 
LEFT JOIN `blog_views` `bv` ON `blog`.`id` = `bv`.`postId` 
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC 

blog_viewsテーブルは、私がどのようなポストを見た人を追跡するために使用する単純なテーブルである私は、クエリに持って参加して、彼はそれを好きかどう

Table:blog_views 
postId userId vote[int values, 1 for like, -1 for dislike and 0 default] 

問題はビューの数は常にblog_taxonomyテーブルのn *カウントを返します!私はポストのタグを制御するために使用します。

Table blog_taxonomy: 
taxonomy_id post_id 
1   1 
2   1 
Table Taxonomy 
id name 
    1 art 
    2 music 

これは、タグと投稿をリンクするために使用される多対多のテーブルです。クエリから削除する問題を解決:(しかし、私はそこにそれを必要とする!

を私がして、グループでbv.postIdを追加しようとしたが、全く効果がないようです!通常で

、私ができます私がここで行方不明です何

select count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meet from blog_views where postId = ?{blog.id} 
group by postId 

を使用してポストしたいビューのデータを取得する?

編集

サブクエリを使用すると問題が解決しました。なぜサブクエリメソッドが動作し、結合が機能しないのですか?私はあなたの分類テーブルにJOIN条件を理解して何から

SELECT bv.views, bv.likes, bv.meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog` 
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id` 
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id` 
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id` 
LEFT JOIN (select count(*) as views,postId,SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh from `blog_views` group by postId) `bv` ON `bt`.`blog_id` = `bv`.`postId` 
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC 
+0

そこから 'taxonomy_id'はどこから来ますか? –

+0

@KP。 blog_taxonomy – Zalaboza

+0

あなた自身の質問に答えてくれたようです。あなたがまだ混乱している場合は、外部集計関数とgroup by節を使わずに同じクエリを実行します。 – Strawberry

答えて

0

は、これはまだ

  • は、すべての加入作る動作しない場合 JOIN taxonomy t ON t.id = taxonomy_id

    1. は、bt.taxonomy_idすなわちtaxonomy_idにエイリアスを追加するには、右ではありませんINNER JOINのように
  • +0

    ちょうどそれをしました:(まだ、blog_taxonomy行の返りカウントをカウント – Zalaboza

    +0

    テーブル構造とサンプルデータを投稿できますか? –

    +0

    )。私はちょうど試行錯誤で見つけた修正と一緒に! – Zalaboza