根据另一个表中具有雄辩的列选择十个顶级类别

问题描述 投票:5回答:2

我有三张桌子:uploadscategories和一张名为many-to-manycategory_upload桌子。

表格如下所示:

**categories**

id
name

**uploads**

id
name
downloads(integer)

**category_upload**

id
category_id
upload_id

每次下载“上传”时,下载列中的值都会增加1。

我想做什么,但无法弄清楚如何开始是根据downloads表中的uploads列选择前10个类别。因此,如果downloads列的总数对于来自给定类别的所有上传来说是最大的,则此类别应为第一,依此类推至第十。

这可以通过雄辩或只是SQL来实现吗?任何提示表示赞赏!

以下是我在模型中建立关系的方式:

分类:

public function uploads(){
        return $this->belongsToMany('App\Upload');
    } 

上传:

public function category(){
    return $this->belongsToMany('App\Category');
}
php mysql sql laravel eloquent
2个回答
1
投票
Select category_id, uploads
From (
    Select category_id, SUM(downloads) as uploads
    From uploads as u
    Left join upload_category as uc on uc.id=u.upload_id
    Left join category as c on c.id=uc.category_id
    Group by  category_id    )as t
  Order by uploads desc
  Limit 10

0
投票

你的Category模型

public function downloads()
{
    return $this->hasMany('App\Upload','category_upload','category_id','upload_id');
}

在你的控制器(Catagory

试试这个

Category::select("*")->with(['downloads' => function($q){
    $q->oderBy('downloades','desc')->take(10)->get();
})
© www.soinside.com 2019 - 2024. All rights reserved.