[英]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.