繁体   English   中英

SQL最近邻居查询(电影推荐算法)

[英]SQL Nearest Neighbor Query (Movie Recommendation Algorithm)

需要帮助使这个(某种)工作查询更加动态。

我有三个表myShows,TVShows和Users

  • myShows
    • 编号(PK)
    • 用户(FK用户)
    • 节目(从FK到TVShows)

想要接受此查询并将其更改为存储过程,我可以将其发送给用户ID并由其完成其余工作...

SELECT showId, name, Count(1) AS no_users
FROM
    myShows LEFT OUTER JOIN
              tvshows ON myShows.Show = tvshows.ShowId
WHERE
    [user] IN (
        SELECT [user]
           FROM
               myShows
           WHERE
               show ='1' or show='4'
          )
    AND
    show <> '1' and show <> '4'
GROUP BY
    showId, name
ORDER BY
    no_users DESC

现在,此功能有效。 但是正如您所看到的,问题出在WHERE( show ='1'或show ='4' )和AND( show <>'1'和show <>'4' )语句内,这些语句当前是硬编码值,这就是我需要保持动态的方式,因为我不知道该用户是否需要检查3个或30个节目。

这个过程效率如何? 这将用于可能会吸引大量用户的iPad应用程序。 我目前运行的电影API(IMDbAPI.com)每小时可获得约13万次点击,并且必须进行大量数据库/代码优化才能使其快速运行。 再次感谢!

如果您要测试数据库架构,请告诉我。

这将满足您的要求

select name, count(distinct [user]) from myshows recommend
inner join tvshows on recommend.show = tvshows.showid
where [user] in 
(   
    select other.[user] from 
        ( select show from myshows where [User] = @user ) my,
        ( select show, [user] from myshows where [user] <> @user ) other
    where my.show = other.show
)   
and show not in ( select show from myshows where [User] = @user ) 
group by name
order by count(distinct [user]) desc

如果您的SQL平台支持WITH Common Table Expressions,则可以优化以上内容以使用它们。

随着数据大小的增加,效率会提高吗? 否。会有效吗? 否。如果只有一个用户与您选择的用户共享一个节目,并且他们观看了一个受欢迎的节目,那么该受欢迎的节目将升至排名第一。

我建议

a)回顾您对推荐节目的想法

b)定期计算结果,而不是按需执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM