我正在构建一个具有与Twitter非常相似的UI的应用程序,包括使用对客户端和API端点的反应来喜欢/收藏帖子的能力。
帖子来自各种来源,包括外部来源,因此出于这个问题的目的,我们可以说Youtube视频和文章。
由于帖子来自各种来源,不一定存储在本地数据库中,因此这些“喜欢”存储在两个表中。
表1是一个“喜欢资源”表,用于存储帖子类型,例如“ 视频”及其标识符,例如“ 2DFlghK1iuZz ”,如下所示:
TABLE `likes_resources` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(255),
`identifier` varchar(255)
)
表2是实际的like表,它针对资源和用户存储以下内容:
TABLE `likes` (
`like_resource_id` int(11),
`user_id` int(11)
)
此设置适用于喜欢和不喜欢帖子以及按帖子或用户列出喜欢的帖子。
我正在努力的是最有效的方式来突出显示用户在查看主供稿时喜欢的帖子,该帖子无限滚动,就像Twitter的供稿一样,而不会撤回潜在的庞大列表,所有用户都喜欢用户并将其与Feed中当前可见的帖子进行比较。
我最初的想法是将当前可见的提要项列表发布到API端点,然后该API终结点列表返回该列表中所有被喜欢的提要项,以便可以将其突出显示。
这似乎是实现此功能的合理方法,还是有更好的方法?
答案 0 :(得分:1)
左加入是您的朋友。
Select likes_resource.*, likes.user_id FROM likes_resource LEFT JOIN likes ON likes_resource.identifier = like_resource_id and user_id = @current_user_id
在任何连接找到匹配项的地方,它将引入并填充user_id字段。如果user_id为null,则用户不喜欢它,也不应突出显示它。