2013-12-20 16 views
1

我有以下查詢:排序依據計數出現在錯誤的順序雄辯查詢生成器(Laravel 4)

public static function artists_most_popular() { 
     $artists_most_popular = DB::table('artists') 
         ->join('fanartists', 'artists.id', '=', 'fanartists.artist_id') 
         ->orderBy(DB::raw('count(*)', 'DESC')) 
         ->groupBy('artists.id') 
         ->take(50) 
         ->get(); 

     return $artists_most_popular; 
    } 

你可以從查詢看到,我想數據出現在由降序排列artist_id在fanartists表中顯示的次數。但是,當我使用「foreach」並輸出這些數據時,它會按升序顯示。任何想法爲什麼發生這種情況?我在SQL Pro中使用了以下查詢,它的工作原理如下:

select *, COUNT(*) 
from artists 
join fanartists on artists.id = fanartists.artist_id 
group by artists.id 
order by (COUNT(*)) desc 

回答

5

我已經改變了一點查詢。希望這會起作用。

$artists_most_popular = DB::table('artists') 
         ->join('fanartists', 'artists.id', '=', 'fanartists.artist_id') 
         ->select(DB::raw('artists.*, fanartists.*, COUNT(*) AS total_artists')) 
         ->orderBy('total_artists', 'DESC')) 
         ->groupBy('artists.id') 
         ->take(50) 
         ->get(); 
+0

這完美地工作。謝謝! – user1072337

0

此外,如果你想返回你的藝術家集合(這個假裝您的藝術家模式被稱爲藝術家),並進一步加強亞南的迴應,你可以這樣做:

$artists_most_popular = Artists::join('fanartists', 'artists.id', '=', 'fanartists.artist_id') 
        ->select(DB::raw('artists.*, fanartists.*, COUNT(*) AS total_artists')) 
        ->orderBy('total_artists', 'DESC')) 
        ->groupBy('artists.id') 
        ->take(50) 
        ->get();