使用firebase数据库查询根据喜欢对帖子进行排序

Posted

技术标签:

【中文标题】使用firebase数据库查询根据喜欢对帖子进行排序【英文标题】:sort post on the basis of likes using firebase database query 【发布时间】:2021-08-28 16:17:20 【问题描述】:

我正在开发一个简单的应用程序,您可以在其中检索 viewpager 中的视频而不是列表视图,并且用户也可以喜欢视频。

但现在我想根据最喜欢的方式对所有视频进行排序。

这是我的数据库截图 -

她是我制作视频适配器的代码,我从中检索视频

代码-

videoView.setVideoPath(obj.getUrl());
        title.setText(obj.getTitle());
        desc.setText(obj.getDesc());

        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) 
                pbar.setVisibility(View.GONE);
                mediaPlayer.start();
            
        );

        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) 
                mediaPlayer.start();
            
        );
    

更新:这是我更新的数据库截图:

~

【问题讨论】:

【参考方案1】:

Firebase 实时数据库查询只能根据存储在数据库中的值对数据进行排序。无法对计算的内容进行排序,例如您的情况下 Likes/$postid 节点下的子元素数量。

常见的解决方法是将喜欢的数量也存储在数据库中,例如作为LikeCount 属性,然后按那个排序。

您可以安全地让客户端写入其相似/不相似并通过以下方式递增/递减计数器:

使用increment() 操作以原子方式执行更改。 并使用安全规则来确保每个增量都与新的赞齐头并进。

有关此示例,请在此处查看我的答案:Using Firebase Security Rules, how can I secure a node that has transactions run on it?


一旦您存储了LikeCount,您就可以按using a query 对其进行排序。比如:

DatabaseReference postsRef = FirebaseDatabase.getInstance().getReference("Posts");
Query query = postsRef.orderBy("LikeCount");
query.addValueEventListener(...

【讨论】:

@Frankn van Puffelen,嘿伙计,我知道如何添加计数器。现在请告诉我我是如何正确查询的。 这个问题还没有回答,你说要创建一个类似的计数器,我现在这样做是数据库排序的主要问题。我要求的。 我添加了一些相关信息。但是请不要像以前那样改变你的问题,因为现在我的回答的第一部分在以后有人来这里时没有意义。

以上是关于使用firebase数据库查询根据喜欢对帖子进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用URL参数在firebase中对博客帖子进行数字分页的正确方法是什么?

如何使用 Firebase 存储喜欢

Firebase 获取数据

Firebase 列表查询 (Android)

Firebase 数据库会获取所有数据然后对其进行限制吗?

Swift - 如何实现“点赞帖子”