2010-10-19 41 views
0

匹配的關鍵字,我有一個鏈接到關鍵字的表項的表項。 我想列出共享關鍵字的所有項目,我想,這樣是最相似的項目將出現最高排名的結果。 所以,我想匹配所有的關鍵字會來最高,匹配列表中出現更低的只有一個關鍵字的項目的項目。如何通過排序相似度

如果項目匹配相同的號碼,我想接着通過關鍵詞的頻率對結果進行排名,以便共享一個不尋常的關鍵字的項目會出現比共享上頻繁出現的關鍵詞項目更高的關鍵字。

目前我的模式是這樣的(但是這可能需要進行變更):

Item ItemKeywords Keywords 
____ ____________ ________ 
ID  ItemID   ID 
Item KeywordID  Word 

我掙扎,甚至與SQL開始得到最匹配關鍵字的項目。誰能幫忙? 我使用SQL Server 2005

編輯 - (添加的完整性)

使用Beth的SQL作爲指針我想出了下面,我認爲這是工作,我想,只是要做多一點的測試:

SELECT IK1.ItemID, 
     IK2.ItemID, 
     COUNT(IK2.KeywordID) AS KeywordCount, 
     MIN(WordFrequency) AS WordFrequency 
    FROM ItemKeywords IK1 
    INNER JOIN ItemKeywords IK2 
     ON IK1.KeywordID = IK2.KeywordID --Keywords match 
     AND IK1.ItemID < IK2.ItemID --Eliminate pairs (Bill & Ted but not Ted and Bill or Bill and Bill) 
    INNER JOIN (SELECT KeywordID, COUNT(*) WordFrequency 
       FROM dbo.ItemKeywords 
       GROUP BY KeywordID) AS KF 
     ON KF.KeywordID = IK2.KeywordID --Join to sub-query to get frequency of word 
    GROUP BY IK1.ItemID, IK2.ItemID 
    ORDER BY COUNT(IK2.KeywordID) DESC, MIN(WordFrequency) ASC --Order by most matching keywords then by most unusual word 

我已經改變了語法略有避免子查詢(在加入做的一切),我已經改變了IK1.ItemID <> IK2.ItemIDIK1.ItemID < IK2.ItemID消除對,我已經添加了第二個訂單,以考慮到頻率你也使用了一個詞。但本質上貝絲回答了這個問題,所以我將其標記爲答案(非常感謝)

+0

可以添加你想要什麼的例子嗎?給我們3項,關鍵字和足夠itemkeywords證明你想 – Beth 2010-10-19 15:47:15

回答

2
Select keywordID, count(itemID) as cnt_item 
from itemKeywords 
group by keywordID 
order by count(itemID) desc 

OK,更好地理解你不想要的東西,嘗試在keywordID場加入itemKeyword表的兩個實例,其中ITEMID不匹配:

select ik.itemID, ik1.itemID as itemID1, ik.keywordID 
from itemkeyword ik inner join itemkeyword ik1 on ik.keywordID = ik1.keywordID 
where ik.itemID <> ik1.itemID 

然後,用那一套,算keywordIDs的數量和降序排列返回列表:

select itemID, itemID1, count(keywordID) as count_kwd 
from 
( select ik.itemID, ik1.itemID as itemID1, ik.keywordID 
    from itemkeyword ik inner join itemkeyword ik1 on ik.keywordID = ik1.keywordID 
    where ik.itemID <> ik1.itemID 
) t 
group by itemID, itemID1 
order by count(keywordID) desc 
+0

謝謝貝絲的結果,但這種列出了與連接到頂部的大多數項目的那些關鍵字標識。我想要的項目,與最上面的其他項目最相似的項目。 – Colin 2010-10-19 15:43:44

+0

PS你忘了在「GROUP BY KeywordID」 – Colin 2010-10-19 15:57:05

+0

是啊,這是編輯我將採取的辦法,我想。 – 2010-10-19 16:07:17