簡體   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