【问题标题】:Laravel 4 left join where something is equal Or return zerosLaravel 4左连接,其中某些东西相等或返回零
【发布时间】:2015-04-16 16:24:49
【问题描述】:

我需要加入两个表,同时对第二个表进行求和和计数。 我已经这样做了,但只有当行存在于第二个表中时。

如果那里什么都没有,我希望连接返回零,而不是停止显示整行。

我确定我需要同时在 uid = uid 和 gid = gid 上左加入,但不知道如何??

这是我的工作,但过滤了太多代码:

$result = Users_team::where('users_teams.gid', '=', $gid)
                        ->leftjoin('events_users', 'users_teams.uid', '=', 'events_users.uid')
                        ->where('events_users.gid', '=', $gid)
                        ->groupBy('users_teams.uid')
                        ->addSelect( array(
                        '*',
                        DB::raw('count(*) as apps'),
                        DB::raw( 'SUM(goals) AS goals' ),
                        DB::raw( 'SUM(assists) AS assists' ),
                        DB::raw( 'SUM(award) AS awards' ),
                        ));

【问题讨论】:

  • 除了向我们展示您的 SQL 之外,您能否偶然向我们展示这两个表中的数据示例,以及您希望使用这两个表中的相同数据时的结果如何包括表?很难弄清楚你到底想做什么。

标签: laravel join laravel-4 eloquent left-join


【解决方案1】:

所以答案是不要在左连接内做一个单独的“哪里”,这实际上撤消了它的“左”部分。

相反,应该在两个条件下进行连接,如下所示。

$result = Users_team::where('users_teams.gid', '=', $gid)
                        ->leftJoin('events_users', function($join)
                            {
                                $join->on('users_teams.uid', '=', 'events_users.uid')
                                ->on('events_users.gid', '=', 'users_teams.gid');
                            })
                        ->groupBy('users_teams.uid')
                        ->addSelect( array(
                        '*',
                        DB::raw('count(*) as apps'),
                        DB::raw( 'SUM(goals) AS goals' ),
                        DB::raw( 'SUM(assists) AS assists' ),
                        DB::raw( 'SUM(award) AS awards' ),
                        ));

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2019-01-05
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多