这是我的第一个线程。如果这是一个副本,我很抱歉,但我无法搜索正确的关键字。
我的问题:网站上有带标签的项目。在一个项目的详细视图上,例如http://localhost/items/a.html,我想根据标签显示相似/相关项目的列表。
- Labor
- Chemie
- Analytik
- Mehrweg
- Labor
- Chemie
- quantitativ
- Laktose
- quantitativ
- abscheiden
- Flaschenpfand
表的结构:(与here中的一样)
表:文章字段:文章,标题
表:标记字段: tagid,标记文本
表:文章标签字段: tagid,文章
当我现在访问以下条目B的入口点(http://localhost/items/b.html)时,我想打印一个列表给用户,该列表按如下顺序显示相关的条目:
当我在谷歌上搜索时,我找到了类似这样的东西:How to compare two comma-separated string lists using MySQL
这看起来和我的问题一样,但我没有看到任何关于如何解决我的查询的提示。我发现的大多数其他帖子只会排除项目a和c,因为它们并不匹配所有的标签(项目a不匹配标签qantitativ和Laktose)
您需要哪些进一步的信息?顺便说一句:我不会将所有标签作为额外的属性添加到items表中,因为我可以在此列上执行匹配。我只是不想总是在标签改变的时候更新这个标签。这只是将数据库中保存的数据大小加倍。
发布于 2018-06-05 06:28:16
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)“相似”的内容时,输出应为
Item-A, 2
Item-C, 1
这是对articletag
的全面扫描。因此,请注意我在讨论时的技巧。
如果在执行查询后需要获取有关项目的信息,请将其用作“派生”表;例如:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(您可以从内部查询中删除ORDER BY
,因为它将优先于外部ORDER BY
而被忽略。)
https://stackoverflow.com/questions/50640495
复制相似问题