[英]SQL Nearest Neighbor Query (Movie Recommendation Algorithm)
需要帮助使这个(某种)工作查询更加动态。
我有三个表myShows,TVShows和Users
想要接受此查询并将其更改为存储过程,我可以将其发送给用户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.