Mysql - 按标签搜索博客

标签 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

最佳答案

我认为您需要右连接而不是左连接并修复查询中的一些其他细节:

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这种情况下,因为不会有行)。

如果您想要至少一场比赛,请添加havingtotal_matches > 0

关于Mysql - 按标签搜索博客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17864929/

相关文章:

php - 使用内部联接时php中的bind_param错误

php - 对 CPU 密集型 Web 应用程序的 ajax 请求进行服务器端缓存

jquery - 删除<li>标签后确定空的<ul>标签

svn - 是否有用于在 Hudson 中列出 subversion 标签的插件?

user-interface - 为什么标签应该用空格分隔?

mysql - 按某种顺序排序,然后随机?

php - 如何使用触发器在SQL中递增?

mysql - 根据模式在 MySQL 中查找拥有汽车的总人数

mysql - 我怎样才能让 mysql 与标签搜索一起获得平均评分?

database - 带有标签的用户数据库