我的博客/标签有 3 个表格
lm_blog、lm_blog_tags 和 lm_blog_tag_relationships。
我现在正在尝试添加一个使用布尔搜索的搜索功能。我明白了,但我也无法让它搜索标签。
SELECT blog.blog_id, title, url, summary,
GROUP_CONCAT(tags.tag SEPARATOR ':') AS tags,
MATCH(title) AGAINST ($query IN BOOLEAN MODE) AS title_rel,
MATCH(summary) AGAINST ($query IN BOOLEAN MODE) AS summary_rel,
MATCH(article) AGAINST ($query IN BOOLEAN MODE) AS article_rel
FROM lm_blog AS blog
INNER JOIN lm_blog_tag_relationships AS rel
ON blog.blog_id = rel.blog_id
INNER JOIN lm_blog_tags AS tags
ON rel.tag_id = tags.tag_id
WHERE MATCH(title, summary, article) AGAINST ($query IN BOOLEAN MODE)
GROUP BY blog.blog_id
ORDER BY title_rel DESC, summary_rel DESC, article_rel DESC, blog.updated DESC
我尝试添加另一个WHERE
子句以匹配聚合标签,但您不能在 where 子句中使用组数据。据我所知,没有办法做WHERE OR HAVING
...
这是我得到的最接近的,但它会检查 WHERE 和 HAVING。我需要一个 WHERE 或 HAVING
SELECT blog.blog_id, title, url, summary,
GROUP_CONCAT(tags.tag SEPARATOR ':') AS tags,
MATCH(title) AGAINST ($query IN BOOLEAN MODE) AS title_rel,
MATCH(summary) AGAINST ($query IN BOOLEAN MODE) AS summary_rel,
MATCH(article) AGAINST ($query IN BOOLEAN MODE) AS article_rel
FROM lm_blog AS blog
INNER JOIN lm_blog_tag_relationships AS rel
ON blog.blog_id = rel.blog_id
INNER JOIN lm_blog_tags AS tags
ON rel.tag_id = tags.tag_id
WHERE MATCH(title, summary, article) AGAINST($query IN BOOLEAN MODE)
GROUP BY blog.blog_id
HAVING tags LIKE $query
ORDER BY title_rel DESC, summary_rel DESC, article_rel DESC, blog.updated DESC