2017-12-18 186 views
2

我有两张名为'favorites'和'trail'的表。我想显示用户的前10名最喜爱的路线。我在他们之间建立了“多对多”的关系。但是,我不知道如何进行查询。什么应该是正确的查询。有人会帮助我找到合适的查询。没有关系,我想是这样这个 -我想在laravel查询中找到前10位最喜爱的路线

$favorites = DB::table('favorites') 
            ->join('trails', 'trails.id', '=', 'favorites.trail_id') 
            ->select('favorites.trail_id', 'trails.name') 
            ->get(); 

第一个是 '道' 表,另一个是 '收藏夹' 波纹管 -

trails

favorites

回答

1

让高层您需要使用聚合函数来计算每条路径的用户数量,并根据计数结果对您的结果进行排序,然后选择10个路径。10

$favorites = DB::table('trails as t') 
       ->select('t.id', 't.name') 
       ->join('favorites as f', 't.id', '=', 'f.trail_id') 
       ->groupBy('t.id') 
       ->groupBy('t.name') 
       ->orderByRaw('COUNT(DISTINCT f.user_id) DESC') 
       ->limit(10) 
       ->get(); 
+0

其获得的查询例外 –

+0

SQLSTATE [42000]:语法错误或访问冲突:1055 'trailboard.t.name' 是不是在GROUP BY(SQL:选择't'.'id','t'。 ''''作为't'的内容'''内部连接'收藏夹'作为''f''''''''''''''''''''''''''' f.user_id)DESC限制10) –

+0

@ Md.RashedulHasan我已更新我的答案是该名称不在group by子句中,可能是您正在运行5.7或'only_full_group_by'模式已启用 –