-1

我有两个表objectsand tags,每个表object都有一个 id,每个表tag都有一个idaname和 a 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”。知道如何结合这两个查询吗?

4

1 回答 1

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想首先找到“最相似”的行,则可以。

希望有帮助。

于 2012-10-13T21:19:12.643 回答