【问题标题】:Find similar objects that share the most tags查找共享标签最多的相似对象
【发布时间】:2012-10-13 17:12:28
【问题描述】:

我有两个表objectstags,每个object 都有一个id,每个tag 都有一个idname 和一个parent(对象的id)。

我想要做的是选择一个object,然后找到其他的objects,按共同的标签数量排序,例如返回 5 个最相似的objects

编辑:

SELECT parent,COUNT(*) as count
FROM `tag` 
WHERE tag="house" OR tag="dog" OR tag="cat" 
GROUP BY parent 
ORDER BY count DESC

这个做我想做的,我可以在这个之前找到另一个查询的对象标签“house,dog,cat”。知道如何组合这两个查询吗?

【问题讨论】:

  • 我同意@sachleen - 很高兴先看到尝试。诚实地尝试是获得实践的好方法!尝试在 SQLFiddle 上设置一个? :)
  • 很抱歉,开始的时候并没有太多,因为我根本不知道该怎么做。我编辑了问题

标签: php mysql database tagging


【解决方案1】:

给定一个对象,你可以像这样找到它的标签:

 SELECT t1.id
 FROM tags t1
 where t1.parent_id = ?

在此基础上,您希望获取该标签列表并找到共享它们的其他 parent_id。

 SELECT parent_id, count(*)
 FROM tags t2
 WHERE EXISTS (
     SELECT t1.id
     FROM tags t1
     WHERE t1.parent_id = ?
     AND t1.id = t2.id
 )
 GROUP BY parent_id

这将为您提供其他 parent_id 共享的标签数量。

如果您想首先找到“最相似”的行,您可以ORDER BY count(*) desc

希望对您有所帮助。

【讨论】:

  • 无论如何我都必须将标签加载到我的班级中,因此不需要“组合”查询。我还有一些问题,比如没有选择对象本身等。不会测试你的解决方案,但它看起来不错,你会被接受;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多