我目前有一个用于我的博客的标签系统。每个博客都被插入到博客表中,标签被插入到标签表中。标签表有一个 blog_id 列,用于将每个标签链接到一个博客项目。
所以假设我们有:
Blog table:
id - name
20 - a nice blog post about product x
Tag table:
id - blog_id - tag
12 - 20 - nice
13 - 20 - product x
我有一个搜索功能,可以根据搜索字符串搜索标签,效果很好。
但我想扩展查询以搜索多个标签,并按最佳匹配排序。搜索多个标签不会有问题,因为我可以分解搜索字符串并循环遍历它,但是按最佳匹配排序它是我无法弄清楚的。
假设我有 3 篇博文,每篇都有以下标签:
1.sunny,in-ear,earphones,review
2.pear,out-ear,earphones,review
3.pear,in-ear,earphones,review
用户搜索“梨形入耳式耳机”,我希望结果的顺序为:
3.(因为 3 个标签匹配)
1.(因为 2 个标签匹配)
2.(因为 1 个标签匹配)
这是查询的样子:
选择`b`。* FROM (`博客` b) 在哪里 ( b.name LIKE '%pear 入耳式耳机%' 或者 b.ID IN ( 选择 bt.blog_id FROM blog_tags bt WHERE bt.tag LIKE '%梨形入耳式耳机%' 和 bt.blog_id = b.id ) ) ORDER BY `b`.`date` desc
谁能帮帮我?
我看过“全文搜索”,但这不是一个选项,因为我的表是 InnoDB。
提前致谢!