我有两个表格objects
和tags
,每个object
都有一个ID,每个tag
都有id
个name
和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”。知道如何将这两个查询结合起来吗?
答案 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
。
希望有所帮助。