为了账号安全,请及时绑定邮箱和手机立即绑定

如何将具有多个表的聚合转换为 Laravel 中的 USE DB?

如何将具有多个表的聚合转换为 Laravel 中的 USE DB?

PHP
至尊宝的传说 2021-12-24 16:07:41
我如何在 Laravel 上编写这样的查询,顺便说一句我正在使用 DB我按照这个指令 https://dba.stackexchange.com/questions/175786/join-multiple-tables-for-aggregates,但仍然没有得到它mysql查询:SELECT inptkegiatan.IDKEGIATAN,    (SELECT COUNT(kuesioner.PERTANYAAN)    FROM kuesioner     WHERE inptkegiatan.IDKEGIATAN = kuesioner.IDKEGIATAN) as totalPertanyaan,    (SELECT SUM(hasilkuesioner.JAWABAN)     FROM hasilkuesioner     WHERE kuesioner.IDKEGIATAN = hasilkuesioner.IDKEGIATAN) as totalJawaban,    (SELECT COUNT(regiskegiatan.IDKEGIATAN)     FROM regiskegiatan     WHERE hasilkuesioner.IDKEGIATAN = regiskegiatan.IDKEGIATAN ) as totalUserFROM inptkegiatan     LEFT JOIN kuesioner ON inptkegiatan.IDKEGIATAN = kuesioner.IDKEGIATAN     LEFT JOIN hasilkuesioner ON inptkegiatan.IDKEGIATAN = hasilkuesioner.IDKEGIATAN     LEFT JOIN regiskegiatan ON inptkegiatan.IDKEGIATAN = regiskegiatan.IDKEGIATAN GROUP BY inptkegiatan.IDKEGIATAN我用那个网址在我的 Laravel 上试过这个,仍然没有得到它$datatwo = DB::table('inptkegiatan')            ->join('kuesioner', 'inptkegiatan.IDKEGIATAN', '=', 'kuesioner.IDKEGIATAN')            ->join('hasilkuesioner', 'inptkegiatan.IDKEGIATAN', '=', 'hasilkuesioner.IDKEGIATAN')            ->join('regiskegiatan', 'inptkegiatan.IDKEGIATAN', '=', 'regiskegiatan.IDKEGIATAN')            ->where('IDNARASUMBER', '=', $value->PROFILEUSERS_ID)            ->select('kuesioner.PERTANYAAN', 'hasilkuesioner.*', 'regiskegiatan.*',                DB::raw('count(DISTINCT(kuesioner.IDKEGIATAN)) + SUM(DISTINCT(hasilkuesioner.IDKEGIATAN)) as articles')            )            ->groupBy('inptkegiatan.IDKEGIATAN')            ->get();
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

首先,使用leftJoin代替join,因为join是替代的innerJoin


$datatwo = DB::table('inptkegiatan')

    ->leftJoin('kuesioner', 'inptkegiatan.IDKEGIATAN', '=', 'kuesioner.IDKEGIATAN')

    ->leftJoin('hasilkuesioner', 'inptkegiatan.IDKEGIATAN', '=', 'hasilkuesioner.IDKEGIATAN')

    ->leftJoin('regiskegiatan', 'inptkegiatan.IDKEGIATAN', '=', 'regiskegiatan.IDKEGIATAN')

    ->where('inptkegiatan.IDNARASUMBER', '=', $value->PROFILEUSERS_ID)

    ->select([

        'inptkegiatan.IDKEGIATAN',

        \DB::raw('SELECT COUNT(kuesioner.PERTANYAAN)

            FROM kuesioner 

            WHERE inptkegiatan.IDKEGIATAN = kuesioner.IDKEGIATAN) as totalPertanyaan'),


        \DB::raw('(SELECT SUM(hasilkuesioner.JAWABAN) 

            FROM hasilkuesioner 

            WHERE kuesioner.IDKEGIATAN = hasilkuesioner.IDKEGIATAN) as totalJawaban'),

        \DB::raw('(SELECT COUNT(regiskegiatan.IDKEGIATAN) 

            FROM regiskegiatan 

            WHERE hasilkuesioner.IDKEGIATAN = regiskegiatan.IDKEGIATAN ) as totalUser')

    ])

    ->groupBy('inptkegiatan.IDKEGIATAN')

    ->get();

试试这个。它应该工作


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信