У меня есть таблица элементов, связанных с таблицей ключевых слов. Я хочу перечислить все элементы, которые разделяют ключевые слова, и я хочу ранжировать результаты, чтобы элементы, которые наиболее похожи, выглядят наивысшими. Итак, я рисую элементы, которые соответствуют всем ключевым словам, будут самыми высокими с элементами, которые соответствуют только одному ключевому слову, появляющемуся ниже в списке.Как ранжировать элементы, соответствующие ключевым словам по сходству
Если элементы соответствуют одинаковому числу ключевых слов, я хочу ранжировать результаты по частоте ключевого слова, так что элементы, которые имеют необычное ключевое слово, будут отображаться выше, чем элементы, которые часто используют ключевое слово, которое часто появляется.
В настоящее время моя схема выглядит так (но это может быть изменено, если это необходимо):
Item ItemKeywords Keywords
____ ____________ ________
ID ItemID ID
Item KeywordID Word
Я изо всех сил, чтобы даже начать с SQL, чтобы получить элементы, которые соответствуют большинству ключевых слов. Может ли кто-нибудь помочь? Я с помощью SQL Server 2005
EDIT - (добавил для полноты)
Использование 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.ItemID
к IK1.ItemID < IK2.ItemID
для устранения пар, и я ve добавил второй порядок по пунктам, чтобы учесть частоту y, что также используется слово. Но по существу Beth ответил на вопрос, так что я буду отмечать его в качестве ответа (большое спасибо)
вы можете добавить пример того, что вы хотите? дайте нам 3 элемента, ключевые слова и достаточно itemkeywords, чтобы продемонстрировать результаты, которые вы хотите. – Beth