Mysql - 按标签搜索博客

时间:2013-07-25 17:33:20

标签: mysql tags

我正在使用以下查询来搜索其标题中包含某些字词的博客。每个单词在表标记中记录为唯一,然后引用表tags_titles中的实际博客。 t.label是存储实际标记词的地方。

由于某些原因,此查询不会产生任何结果,除非我输入一个数字,在这种情况下它会生成所有博客而不进行过滤。我怎样才能让它发挥作用?

SELECT tt.blog_id, b.title, COUNT(*) AS total_matches
FROM tags_titles AS tt

INNER JOIN tags AS t
ON tt.tag_id = t.tag_id

LEFT JOIN blogs AS b
ON tt.blog_id=b.blog_id

WHERE t.label IN ('boats','planes')
GROUP BY tt.blog_id
ORDER BY total_matches DESC

1 个答案:

答案 0 :(得分:1)

我认为您需要right join而不是left join,并在查询中修复其他一些细节:

SELECT b.blog_id, b.title, COUNT(t.label) AS total_matches
FROM tags_titles tt INNER JOIN
     tags t
     ON tt.tag_id = t.tag_id RIGHT JOIN
     blogs b
     ON tt.blog_id=b.blog_id and
        t.label IN ('boat','plane')
GROUP BY b.blog_id
ORDER BY total_matches DESC;

你在博客层面要求一些东西。但是,连接是保留所有标记,而不是博客。一旦切换到博客,total_matches计算匹配标记的数量以获得计数(在这种情况下,count(*)永远不会返回0,因为没有行。< / p>

如果您想要至少一个匹配项,请添加having total_matches > 0