我有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
请帮我纠正查询
答案 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