需要幫助使這種(某種)工作查詢更具動態性。SQL最近鄰居查詢(電影推薦算法)
我有三個表myShows,TVShows和用戶
- myShows
- ID(PK)
- 用戶(FK到用戶)
- 顯示(FK到TVShows)
想借此查詢和更改e它存儲過程,我可以發送用戶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(顯示<>'1'並顯示<>'4')硬編碼的值,這就是我需要的動態,因爲我不知道用戶是否有3或30個需要檢查的節目。
這個過程又如何低效?這將用於iPad應用程序,可能會得到很多用戶。我目前運行一個電影API(IMDbAPI.com),每小時獲得大約130k的點擊率,並且必須進行大量的數據庫/代碼優化才能使其運行速度更快。再次感謝!
如果你想讓測試的數據庫模式讓我知道。
可以將序列和/或序列轉換爲IN ... VALUES(1),(4)...'help? http://sqlfiddle.com/#!6/0dceb/13 – biziclop
我在sqlfiddle上重新創建了這個問題:http://sqlfiddle.com/#!3/84311/1/0 缺少的核心內容之一是[用戶]邏輯...它不知道什麼顯示甚至檢查。 上面的示例將看到User1喜歡showId 1和2,User2喜歡1和3,運行該查詢時,它將返回3,這是正確的。但我的查詢仍然有硬編碼的值。 – bfritz
爲什麼3在你的例子中是正確答案?你想達到什麼目的? – podiluska