Php 根据另一个表格中的一列,选择十个最热门的类别
我有三个表:uploads、categories和一个名为category_upload的多对多表 这些表如下所示:Php 根据另一个表格中的一列,选择十个最热门的类别,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我有三个表:uploads、categories和一个名为category_upload的多对多表 这些表如下所示: **categories** id name **uploads** id name downloads(integer) **category_upload** id category_id upload_id 每次我下载上传文件时,下载栏中的值都会增加1 我想做的是,根据uploads表中的downloads列选择前10个类别,但我不知道如何开始。因此,如果下载列
**categories**
id
name
**uploads**
id
name
downloads(integer)
**category_upload**
id
category_id
upload_id
每次我下载上传文件时,下载栏中的值都会增加1
我想做的是,根据uploads表中的downloads列选择前10个类别,但我不知道如何开始。因此,如果下载列的总数是给定类别中所有上传的最大值,那么这个类别应该排在第一位,依此类推到第十位
这可以通过雄辩的或仅仅是SQL来实现吗?如何实现?任何提示都将不胜感激
以下是我在模型中建立关系的方式:
类别:
public function uploads(){
return $this->belongsToMany('App\Upload');
}
上传:
public function category(){
return $this->belongsToMany('App\Category');
}
你的分类模型
在你的controllerCatagory中
试试这个
Category::select("*")->with(['downloads' => function($q){
$q->oderBy('downloades','desc')->take(10)->get();
})
样本数据和期望的结果将非常有用。例如,什么是书?@GordonLinoff书是上传的,我更正了。嗨,谢谢你的回答。它做了一些小的调整,下面是我改变的:选择名称,从选择c.name上传,SUM作为上传从上传下载作为u内部连接类别\上传作为uc上的uc。上传作为c上的c上传作为u.id=u.id内部连接类别c上的c.id=uc.category\ id按c.name分组作为t按上传顺序描述限制10
public function downloads()
{
return $this->hasMany('App\Upload','category_upload','category_id','upload_id');
}
Category::select("*")->with(['downloads' => function($q){
$q->oderBy('downloades','desc')->take(10)->get();
})