需要帮助使这个(某种程度上)工作查询更加动态。
我有三个表myShows,TVShows和User
想要接受这个查询并将其更改为一个存储过程,我可以将用户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 (显示='1‘或显示= '4')和and (显示<> '1’和显示<>‘4’)语句中,这是当前硬编码的值,而这正是我需要动态的,因为我不知道用户是否有需要检查的3或30条显示。
此外,这一过程效率有多低?这将用于可能获得大量用户的iPad应用程序。目前,我运行的是一个电影API (IMDbAPI.com),它的点击率约为130 K,需要进行大量的数据库/代码优化才能使其运行得更快。再次感谢!
如果您想要测试的数据库模式,请告诉我。
发布于 2012-06-29 08:49:22
这将满足您的要求。
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公共表表达式,则可以优化上述表达式以使用它们。
随着数据大小的增加,它会有效率吗?不是的。它会有效吗?不是的。如果只有一个用户与你选择的用户共享一个节目,并且他们观看了一个流行的节目,那么该流行节目将上升到排名的首位。
我建议你
( a)回顾你对推荐表演的想法
( b)定期计算结果,而不是按需执行。
https://stackoverflow.com/questions/11256074
复制相似问题