如何在数据库中存储评级平均值

时间:2015-09-07 14:07:52

标签: laravel laravel-5 eloquent

您好我刚刚为自己实施了评分系统 A有3个模型和表格:场地,用户,评论 将场地视为分数。
我的评级表看起来像这样:

 static int counter = 0;

- (void)taskCompleted {
    // can be called 2000 times from 2000 different threads, all at once

    if( counter > 0) {
        return;
    }

    OSAtomicIncrement32Barrier(&counter);

    dispatch_group_async(self.group, self.queue, ^{

        OSAtomicDecrement32Barrier(&counter);
        if( counter > 0 ) {
            return;
        }

        HEAVY_STUFF
    });
}

此处问题开始

每当用户为场地添加评论时,Laravel Schema::create('reviews', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->integer('venue_id')->unsigned(); $table->foreign('venue_id')->references('id')->on('venues')->onDelete('cascade'); $table->tinyInteger('quality'); $table->tinyInteger('cost'); $table->timestamps(); }); 事件就会被解雇,我只是对所有场地评分进行求和,计算所有记录编号,总计场地评分,计算场地记录编号并计算评分。 特殊方式并将场地评级存储在场地表中称为评级的属性中 但是,如果我只是在2分钟内在表中插入10000行而不进行平均,并且使用上述方法进行7分钟,这似乎效率非常低 如何在表格中存储场地评级以及如何更新它

我尝试但没有帮助的事情

1-缓存查询(减少仅1分钟)
2-排队等候工作(减少3分钟)

1 个答案:

答案 0 :(得分:0)

为什么不动态查询平均评分?

$count = \DB::table('ratings')
    ->selectRaw('SELECT AVG(rating) as average_rating')
    ->where('venue', $someVenueId)
    ->get();
相关问题