对我的上一个问题得到了很好的答案:Improving Efficiency of my SQL(感谢@Bohemian)我现在意识到我有点近视,因为有一个额外的复杂性。
使用相同的表LIKES(如ID,userID,objectID,likeDate)的想法是,每个人在喜欢它后喜欢它时,每人获得1分。
在上一个问题的帮助下,我可以在用户喜欢之后得到喜欢的数量,但现在我需要考虑这个问题中有对象。
我希望能够计算用户有权获得的分数,方法是计算他们所喜欢的每个对象之后为他们制作的相似内容(哦,这是一个混乱的句子)。
我正在考虑进一步“嵌套”SQL,但这不属于我的联盟,因此除了上一个问题之外我无法提供任何其他代码。
答案 0 :(得分:0)
您可以使用相关子查询执行此操作:
select l.userid, l.objectid, l.LikeDate,
(select count(*) from likes l2 where l2.objectid = l.objectid and l2.LikeDate >= l.likeDate and l2.userid <> l.userid
) as NumLikesAfterward
from likes l
这样做是指在给定之后,由其他用户计算对象的喜欢数量。它为likes
中的每一行返回一行。使用select
子句中的相关子查询完成计算。
假设您有likes(objectid, likedate, userid)
的索引,它的运行速度会快得多。
获取用户的总积分:
select sum(NumLikesAfterward) as TotalPoints
from (select l.userid, l.objectid, l.LikeDate,
(select count(*) from likes l2 where l2.objectid = l.objectid and l2.LikeDate >= l.likeDate and l2.userid <> l.userid
) as NumLikesAfterward
from likes l
where userid = $userid
) uol