我们可以在StackOverflow网站上用多个标签标记一个问题,我想知道如何找出与常见标签最相关的问题.
假设我们在数据库中有100个问题,每个问题都有几个标签.假设用户正在浏览特定问题,我们希望系统在页面上显示相关问题.相关问题的标准是它们具有最常见的标签.
例如:问题1标有AAA,BBB,CCC,DDD,EEE.
问题2与前1相关,因为它也包含所有这5个标签.问题3与前2相关,因为它只有Questio1有4或3个标签.......
所以我的问题是如何设计数据库并快速找出与问题1相关的问题.非常感谢你.
也许是这样的:
select qt.question_id, count(*)
from question_tags qt
where qt.tag in
( select qt2.tag
from question_tags qt2
where qt2.question_id = 123
)
group by qt.question_id
order by 2 desc
Run Code Online (Sandbox Code Playgroud)
不完全确定您的意思,但“标签”页面按受欢迎程度列出了标签(如标记的数量)。
编辑:这是关于SO还是关于你自己的应用程序?如果它是关于您自己的应用程序,请删除 SO 标签,因为它有点误导。
编辑2:我会说:
SELECT * FROM `questions` WHERE `tag` LIKE '%tagname%' OR (looped for each tag) LIMIT 5,0
Run Code Online (Sandbox Code Playgroud)
其中 5 是您想要返回的最大结果(至少进行一些优化)。可能不是最好的解决方案,但我可以看到它的工作原理。
您可能还想尝试LIKE使用标题进行匹配。