【问题标题】:Best way of checking if a post is in favorites list检查帖子是否在收藏夹列表中的最佳方法
【发布时间】:2017-07-21 05:54:09
【问题描述】:

我正在构建一个社交媒体网络应用程序,我的数据库中有这样的内容:

表的最爱: 用户身份; POSTID;

在网络应用主控制器上是这样的:

var posts = [{postId: x, content: 'content'}];
var favorites = [{postId: x, userid: y}];

但是当我在网络应用程序上加载所有帖子(不仅仅是收藏夹)时,我不知道检查给定帖子是否在用户的收藏夹中以便为嵌入其中的心形图标着色的最佳方法是什么.

我拥有所有用户的最爱,但在性能方面有什么更好的呢?最愚蠢的方法是检查给定帖子的 postId 是否在任何用户最喜欢的对象中,但我认为它看起来很糟糕而且产量很低。

P.S:Web 应用程序将在主页视图中加载至少 200 个帖子,它们将填满以小方块划分的屏幕。所以这就是为什么我需要一些好的性能,每次用户到达屏幕底部时,应用程序都会加载 200 个帖子。

P.S:我知道这是概念问题,但如果有人需要知道我使用的是什么语言,我使用的是全部 javascript(端到端)+ MySQL。

提前谢谢各位。

【问题讨论】:

  • 您是否需要,给定一个帖子,知道它是否是任何人的最爱?或者知道谁将其标记为收藏?基本上,是针对特定用户的查询,还是针对任何用户或所有用户的查询?
  • 嗨富兰克林。我需要知道特定用户(登录和浏览的用户)是否已将其标记为收藏。它只会为此用户显示一个心形。他不会知道是否有其他人也将给定的帖子添加到收藏夹,他只会知道他是否添加了。我如何将给定的帖子与用户的收藏列表相关联,以了解他是否在收藏夹中?
  • 你认为INDEXes是什么?

标签: javascript mysql performance web-applications


【解决方案1】:

鉴于这些表格:

  • 收藏夹:postId、userId
  • 用户:用户 ID,{更多 atts}
  • 帖子:postId、userId、{more atts}

    SELECT posts.*, IF(posts.postId IN (SELECT postID FROM Favorites WHERE userId = anId),true,false) as isFavorited FROM Posts posts LIMIT 200;

此查询转到 Posts 并检索其中的 200 个。如果 postId 在该 userId (anID) 的收藏夹表中,则 isFavorited 为 1,否则为 false。

希望对你有帮助。

【讨论】:

  • IN ( SELECT ... ) 表现不佳;改写为JOIN
  • 谢谢大家,帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 2015-01-10
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多