需要帮助使这种(某种)工作查询更具动态性。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