使用mysql连接查询时重复的结果

时间:2015-09-03 12:27:50

标签: php mysql

我有3张表如下
   1)Tag_master

  id        tag_name
------------------------------
  1         Movies
  2         English Movies

2)标签

   Tag_id          article
----------------------------------
     1               ABC
     2               ABC
     1               XYZ
     1               PQR
     2               EFG
     1               EFG
     2               LMN
     2               HIJ 
 --------------------------------

3)article_view

     article          view_date
  --------------------------------
       ABC            2015-07-01
       ABC            2015-07-01
       ABC            2015-07-02
       ABC            2015-07-03
       XYZ            2015-07-05
       XYZ            2015-07-05
       XYZ            2015-07-08
       PQR            2015-08-01
       PQR            2015-08-01
       LMN            2015-08-02
       HIJ            2015-08-02
 -----------------------------------

我希望每篇文章的观众都不会被那些'标记'包含单词电影

我的查询如下

 select t.article,count(*) as cnt from tags t LEFT JOIN tag_master tm ON  
  t.tag_id=tm.id INNER JOIN article_view act ON t.article=act.article  
 WHERE tm.tag_name LIKE '%movies%' group by article

它给出了以下结果

  article   cnt
 ----------------   
   ABC       8
   HIJ       1
   LMN       1
   PQR       2
   XYZ       3    
-----------------

在此结果文章 ABC 中只有4个观看者,但在查询结果中显示8

请帮我纠正查询

2 个答案:

答案 0 :(得分:1)

为什么不从article_view表中查询

select article,count(view_date) as cnt from article_view group by article

...

  

您应该在查询中计算 view_date

答案 1 :(得分:1)

正如评论Be careful what you count中已经指出的那样,您需要分别从article_view获取计数,然后加入一些内容

select 
 t.article,
 act.cnt 
 from tags t 
 LEFT JOIN tag_master tm ON  t.tag_id=tm.id 
 INNER JOIN (
   select count(*) as cnt, article from article_view
   group by article
 )act
 ON t.article=act.article  
 WHERE 
 tm.tag_name LIKE '%movies%' 
 group by article