我有一个games
表,用于存储游戏详细信息(gameId, name, description
),以及一个category
表,其中包含两列catId, name
和一个game_category
表( id, game_id, category_id
),它将每个游戏与其所属的类别联系起来。
表格中的关系是固定的,因此我希望根据特定游戏的共享类别数量找到相关游戏(最相似)。结果必须按更高的相似度排序
答案 0 :(得分:1)
你可以做的是寻找与参考游戏有最大共同范围的其他游戏。为此,获取参考游戏的所有类别,并计算与其他游戏共享的类别数量。具有较多常见类别的那些应该是最相似的:
SELECT SimCG.gameId, COUNT(*) NumberOfSharedCategories
-- count of categories of similar games
FROM dbo.CategoryGame AS RG
-- table of reference game
INNER JOIN dbo.CategoryGame AS SimCG
-- table of similar games
ON RG.categoryId = SimCG.categoryId
-- common categories shared by reference and similar games
WHERE
RG.gameId = 1
-- Id of the refenece game
AND SimCG.gameId <> 1
-- Exclude the reference game from the compared games
GROUP BY SimCG.gameId
-- Group by similar game id
您可以轻松使用此基本查询加入游戏表,并按NumberOfSharedCategories
列按降序排序。