2012-10-13 50 views
-1

我有兩個表objectstags和類似的物體,每個object具有ID,並且每個tag具有id一個nameparent(該對象的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 

這一次我想要做什麼,我可以用這一個之前另一個查詢找到obejcts標籤「的房子,狗,貓」。任何想法如何我可以結合這兩個查詢?

+2

那麼你有什麼嘗試? – sachleen

+1

我同意@sachleen--首先看到一個嘗試會很好。誠實的嘗試是一種練習的好方法!嘗試在SQLFiddle中設置一個? ':'' – halfer

+0

抱歉沒有太多的開始,因爲我根本不知道該怎麼做。我編輯了問題 – Wurstbro

回答

1

給定一個對象,你可以找到它的標籤是這樣的:

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

建設上,要採取的標記,列表,找到共享他們的其他parent_ids。

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

希望有所幫助。

+0

反正我不得不將標籤加載到我的類中,因此不需要「組合」查詢。我有更多的問題,如不選擇對象本身等。不會測試你的解決方案,但看起來很好,你會被接受;) – Wurstbro