php - 如何在 laravel 将具有多个表的聚合转换为 USE DB?

标签 php mysql laravel

我如何在 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 totalUser
FROM 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 上用那个 url 试过了,还是不明白

$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();

最佳答案

首先,使用 leftJoin 而不是 join,因为 joininnerJoin 的替代方法

$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();

试试这个。它应该工作

关于php - 如何在 laravel 将具有多个表的聚合转换为 USE DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57783965/

相关文章:

javascript - 如何从 php 变量数组执行 jquery 自动完成功能

php - Ajax:将变量添加到formData

mysql - onDelete 级联不适用于 "one to one"- Sequelize.js

mysql打印特定表范围内的数据

php - Composer : can't create new project

php - Laravel如何编写具有多个条件但记录在同一用户下的搜索查询

php - $变量 = $_POST ['variable'].$_GET ['variable'];这是可以接受的吗?

php - 添加、编辑和删除元素并更新其他元素的值的算法

mysql - SQL:4 个表到 1 个表,包含计数、分组和扣除?!

laravel - 无法在 laravel 应用程序中加载 FFProbe