查找共享最多标签的类似对象

时间:2012-10-13 17:12:29

标签: php mysql database tagging

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

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

编辑:

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

这个做了我想要的,我可以在这个之前用另一个查询找到obejcts标签“house,dog,cat”。知道如何将这两个查询结合起来吗?

1 个答案:

答案 0 :(得分: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_ids共享的标签数量。

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

希望有所帮助。