让我们以StackOverflow问题为例。他们每个人分配了多个标签。如何构建一种算法,根据它们有多少个普通标签(按普通标签的数量排序)找到相关问题?

现在,除了将至少具有一个公共(public)标签的所有问题选择到一个数组中,然后遍历它们,为每个项目分配一定数量的公共(public)标签,然后对该数组进行排序,我想不出什么更好的选择了。

有更聪明的方法吗?完美的解决方案将是单个sql查询。

最佳答案

这可能和O(n ^ 2)一样糟糕,但是它可以工作:

create table QuestionTags (questionid int, tag int);

select q1.questionid, q2.questionid, count(*) as commontags
from QuestionTags q1 join QuestionTags q2
where q1.tag = q2.tag and q1.questionid < q2.questionid
group by q1.questionid, q2.questionid order by commontags desc;

关于mysql - 基于通用标签搜索相关项目的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1556378/

10-11 18:14