如何在Laravel中编写此查询(包含group by并加入子查询)?

时间:2014-11-24 06:46:28

标签: mysql laravel

我有两个模型频道和节目。关系是:一个频道有很多节目。

现在我打算在我的视图中显示特定频道有多少节目。

所以我想出了以下SQL来获取相关数据。

SELECT channels.channel_id, channels.name, num_of_programs FROM channels LEFT JOIN ( SELECT p.channel_id cid, COUNT(*) num_of_programs FROM programs p, channels c WHERE p.channel_id = c.channel_id GROUP BY p.channel_id ) v ON channels.channel_id = v.cid;

如何在Laravel Eloquent中编写此查询?

顺便说一句,是否有更好,更高效的SQL来完成我的任务?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

有很多可能性。那是一个:

    DB::table('channels')
        ->join('programs', 'channels.id', '=', 'programs.channel_id')
        ->select('channels.id', 'channles.name', DB::raw('count(programs.id) as num_of_programs'))
        ->groupBy('channels.id', 'channels.name')
        ->get();

我希望它适合你。

答案 1 :(得分:1)

你可以通过join和group by来实现这个目标,而且我对Laravel Eloquent并不熟悉。 你可以试试这个

    SELECT c.channel_id,c.name,COUNT(p.program_id)
    FROM channels c 
    LEFT JOIN  programs p ON p.channel_id = c.channel_id
    GROUP BY p.channel_id;