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

时间:2017-12-18 14:51:35

标签: php mysql sql laravel eloquent

我有三个表:namespace AppBundle\Repository; use Doctrine\ORM\EntityRepository; class ProductRepository extends EntityRepository { public function getAllOrderedByNameQuery() { return $this->getEntityManager() ->createQuery( 'SELECT p FROM AppBundle:Product p ORDER BY p.name ASC' ); } } uploads和一个名为categories的{​​{1}}表。

表格如下:

many-to-many

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

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

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

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

类别:

uploads

上传:

downloads

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();
})