0

我的最后一个问题得到了很好的答案:提高我的 SQL 效率(感谢@Bohemian)我现在意识到我有点短视,因为还有一个额外的复杂性。

使用同一张表 LIKES (likeID,userID,objectID,likeDate) 的想法是,一个人在他们喜欢一个对象后每次喜欢一个对象就可以获得 1 分。

在上一个问题的帮助下,我可以在用户喜欢之后获得喜欢的数量,但现在我需要考虑这个问题中存在对象。

我希望能够通过计算用户对他们喜欢的每个对象的点赞数来计算用户有权获得的点数(哦,那是一个凌乱的句子)。

我正在考虑对 SQL 进行进一步的“嵌套”,但这超出了我的范围,因此除了最后一个问题中的内容之外,我无法提供任何代码。

4

1 回答 1

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
于 2013-02-07T14:12:18.560 回答