如何查找具有最常见标记的记录,例如StackOverflow中的相关问题

7 sql database tags algorithm

我们可以在StackOverflow网站上用多个标签标记一个问题,我想知道如何找出与常见标签最相关的问题.

假设我们在数据库中有100个问题,每个问题都有几个标签.假设用户正在浏览特定问题,我们希望系统在页面上显示相关问题.相关问题的标准是它们具有最常见的标签.

例如:问题1标有AAA,BBB,CCC,DDD,EEE.

问题2与前1相关,因为它也包含所有这5个标签.问题3与前2相关,因为它只有Questio1有4或3个标签.......

所以我的问题是如何设计数据库并快速找出与问题1相关的问题.非常感谢你.

Ton*_*ews 9

也许是这样的:

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)


Ros*_*oss 0

不完全确定您的意思,但“标签”页面按受欢迎程度列出了标签(如标记的数量)。

编辑:这是关于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使用标题进行匹配。