如何找到2个关键字列表之间的最佳匹配

时间:2018-07-25 20:43:03

标签: sql postgresql select

我正在为自己的特定需求建立广告网络:

  • 用户选择关键字并将其添加到文章中
  • 广告商选择关键字并将其添加到他的广告中

当观众进入用户的文章时,我需要查找的是与该特定文章具有最高匹配关键字的广告(如果没有匹配关键字,则为任何广告)

用户关键字表示例:

ArticleID | keyword
1         | funny
1         | memes
1         | lol
2         | boring

广告客户关键字表示例

AdId      | keyword
1         | funny
1         | lol
2         | funny
2         | food
3         | kids

因此,如果观众进入ID = 1的文章,则最终的广告将是 ID为1的广告,因为它同时匹配了“搞笑”和“大声笑”,因此结果更为详细:

Result:
AdId      | count
1         | 2
2         | 1
3         | 0

如何建立查询来做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以加入关键字并计算结果:

SELECT   AdId, COUNT(*)
FROM     ad_keywords a
JOIN     user_keywords u ON a.keyword = u.keyword
WHERE    article_id = 1
GROUP BY AdId
ORDER BY 2 DESC
LIMIT    1