如何计算一个laravel帖子的评分

9jyewag0  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(122)

我需要计算服务器评级。我有表server_user_likes,其中存储了server_iduser_id,用户的服务器赞也存储在其中。1个赞= ServerUserLike中的1行。使用server_iduser_id

Schema::create('server_user_likes', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->id();
            $table->unsignedBigInteger('server_id');
            $table->string('user_id');
            $table->index('server_id', 'server_user_likes_server_idx');
            $table->foreign('server_id', 'server_user_likes_server_fk')->on('servers')->references('id');
            $table->timestamps();
        });

型号服务器用户类

public function server()
    {
        return $this->hasMany(Server::class);
    }

我数了一下服务器点赞的数量

$ratingCounts = DB::table('server_user_likes')
            ->where('server_id', $server->id)
            ->count();

我统计了所有服务器的点赞总数

$allRatingCounts = DB::table('server_user_likes')
            ->count();

现在我需要计算服务器的评级,所谓的前10名减法将不会有帮助,因为服务器和用户可以增加每一次
p.s服务器与Post相同。

k3bvogb1

k3bvogb11#

我建议使用这个查询来获得前10名的服务器/职位的基础上喜欢。

// here I use eloquent with model ServerUserLike

$results = ServerUserLike::query()
  ->select('server_id')
  ->selectRaw('COUNT(*) AS likes_count')
  ->groupBy('server_id')
  ->orderByDesc('likes_count')
  ->take(10)
  ->get();

结果将是前10个服务器的列表[server_id,likes_count]
根据要求,这是一个示例,您可以在top_server.blade.php中显示前10名

@foreach ($results as $topServer)
<tr>
  <td>{{ $loop->iteration }}</td>
  <td>{{ $topServer->server_id }}</td>
  <td>{{ $topServer->likes_count }}</td>
</tr>
@endforeach

$loop->iteration将显示从1到10的数字。
https://tutsforweb.com/loop-variable-foreach-blade-laravel/

相关问题