我需要创建一个查询,以匹配表tag_id
中匹配tags_blogs
的博客。还有另一个表包含我在此阶段并不关心的实际标签。
如何获取此表格内容:
reference_id tag_id blog_id
1 1 1
2 2 1
3 10 6
4 11 6
5 10 7
6 11 7
7 11 8
并将其返回到(例如)blog_id = 6
:
blog_id total_matches
7 2
8 1
换句话说,返回任何博客的id,它们与提供的参数匹配tag_id,以及实现了多少匹配的计数。
这是我到目前为止的代码(到目前为止我离开了):
SELECT blog_id FROM tags_blogs WHERE blog_id = 6
答案 0 :(得分:2)
您需要一个子查询来选择所有6个(或任何博客ID)标签,如果博客在该子查询中有标签ID,则将其选中,然后将相同的blog_ids组合在一起并计算它们。
SELECT
a.blog_id,
count(*) as total_matches
FROM
tags_blogs as a
WHERE
a.tag_id IN
( SELECT tag_id FROM tags_blogs WHERE b.blog_id=6 ) AND
a.blog_id!=6
GROUP BY a.blog_id
将返回
之类的结果blog_id total_matches
7 2
8 2
答案 1 :(得分:1)
根据您的评论,这里更像您正在寻找的内容。请注意,此特定查询不一定是最佳的
select tb.blog_id, count(*)
as total_matches
from tags_blogs tb
where tag_id in (select distinct tag_id from tags_blogs where blog_id = 6)
and blog_id != 6
group by blog_id
您可能会发现在某些情况下这会更有效,或者更容易创建:
select tb.blog_id, count(*)
as total_matches
from tags_blogs tb
join tags_blogs tb1 on tb1.tag_id = tb.tag_id and tb1.blog_id != tb.blog_id
where tb1.blog_id = 6
group by tb.blog_id;