首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用MySQL和约束搜索匹配标签(相似性搜索

使用MySQL和约束搜索匹配标签(相似性搜索
EN

Stack Overflow用户
提问于 2018-06-01 17:39:48
回答 1查看 56关注 0票数 -2

这是我的第一个线程。如果这是一个副本,我很抱歉,但我无法搜索正确的关键字。

我的问题:网站上有带标签的项目。在一个项目的详细视图上,例如http://localhost/items/a.html,我想根据标签显示相似/相关项目的列表。

  • Item A-Tags

代码语言:javascript
复制
- Labor
- Chemie
- Analytik
- Mehrweg

  • Item B-Tags

代码语言:javascript
复制
- Labor
- Chemie
- quantitativ
- Laktose

  • Item C-Tags

代码语言:javascript
复制
- quantitativ
- abscheiden
- Flaschenpfand

表的结构:(与here中的一样)

表:文章字段:文章,标题

表:标记字段: tagid,标记文本

表:文章标签字段: tagid,文章

当我现在访问以下条目B的入口点(http://localhost/items/b.html)时,我想打印一个列表给用户,该列表按如下顺序显示相关的条目:

  • Item A(由于两个相同的标签)
  • Item C(因为一个相同的标签)

当我在谷歌上搜索时,我找到了类似这样的东西:How to compare two comma-separated string lists using MySQL

这看起来和我的问题一样,但我没有看到任何关于如何解决我的查询的提示。我发现的大多数其他帖子只会排除项目a和c,因为它们并不匹配所有的标签(项目a不匹配标签qantitativ和Laktose)

您需要哪些进一步的信息?顺便说一句:我不会将所有标签作为额外的属性添加到items表中,因为我可以在此列上执行匹配。我只是不想总是在标签改变的时候更新这个标签。这只是将数据库中保存的数据大小加倍。

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 06:28:16

代码语言:javascript
复制
SELECT  c.articleid, COUNT(*) AS ct
    FROM articletag AS b
    JOIN articletag AS c  ON c.tagid = b.tagid
                         AND c.articleid != b.articleid
    WHERE b.articleid = 123
    GROUP BY c.articleid
    ORDER BY ct DESC;

在搜索与123 (示例中的Item-B)“相似”的内容时,输出应为

代码语言:javascript
复制
Item-A, 2
Item-C, 1

这是对articletag的全面扫描。因此,请注意我在讨论时的技巧。

如果在执行查询后需要获取有关项目的信息,请将其用作“派生”表;例如:

代码语言:javascript
复制
SELECT articles.*
    FROM ( the above SELECT ) AS x
    JOIN articles USING(articleid)
    ORDER BY x.ct DESC;

(您可以从内部查询中删除ORDER BY,因为它将优先于外部ORDER BY而被忽略。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50640495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档