2017-12-18 9 views
5

uploads,およびmany-to-manyというテーブルがcategory_uploadという3つのテーブルを持っています。雄弁を持つ別のテーブルの列に基づいて10のトップカテゴリを選択

テーブルは次のようになります。ダウンロード列の値は、私が何をしたいのか1.

により増加したが、できなかったされて

**categories** 

id 
name 

**uploads** 

id 
name 
downloads(integer) 

**category_upload** 

id 
category_id 
upload_id 

私はダウンロードするたびに「アップロード」どのように起動するかを把握するには、テーブルのdownloads列に基づいてトップ10のカテゴリを選択します。したがって、downloads列の合計が特定のカテゴリのすべてのアップロードで最大の場合、このカテゴリは1番目になります。

これは雄弁な、あるいはSQLだけで実現できますか?任意のヒントが評価されています!

カテゴリ:

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

アップロード:

public function category(){ 
    return $this->belongsToMany('App\Category'); 
} 
+0

サンプルを試してみてください。例えば「本」とは何ですか? –

+0

@GordonLinoff本がアップロードされました。私はそれを修正しました。 –

答えて

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

こんにちは、お返事ありがとうございます。 より( )アップロードするとc.name、SUM(ダウンロード)を選択してください アップロード先:u INNERがuc.upload_id = u.idにucを追加しました。 INNERはcとしてカテゴリーに参加するc.id = uc.category_id グループby c.name)を としてアップロード制限10 –

0

あなたCategoryモデル

ここ

は私がモデルで、私の関係を設定した方法です お使いのコントローラで

Catagory

データ、所望の結果が本当に役立つだろう、この

Category::select("*")->with(['downloads' => function($q){ 
    $q->oderBy('downloades','desc')->take(10)->get(); 
}) 
関連する問題