如何在同一查询上区分按年份和按类别分组?

问题描述 投票:0回答:2

我想在distinct和groupby之后查询结果 这是我的代码

 $results = DB::table('dokumen')
            ->join('pengadaan', 'dokumen.id_jenis_pengadaan', '=', 'pengadaan.id')
            ->select(
                    DB::raw('COUNT(nama_paket) AS jml'),
                    DB::raw('jenis_pengadaan as jenis_pengadaan'),
                    DB::raw('tahun as tahun')
                    )
            ->groupBy('jenis_pengadaan', 'tahun')
            ->orderBy('tahun')
            ->get();

        $hasil = [];
        foreach ($results as $result) {
            $kategori = $result->jenis_pengadaan;
            $jml =  $result->jml;
                    $hasil[] = [
                        'tahun' => $result->tahun,
                        'kategori_paket' => $kategori,
                        'jml' => $jml,
                    ];
        }

dd($hasil);


这是我的代码的结果

array:12 [▼ // app/Http/Controllers/HomeController.php:51
  0 => array:3 [▶
    "tahun" => 2022
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung - Barang"
    ]
    "jml" => array:1 [▶
      0 => "9"
    ]
  ]
  1 => array:3 [▶
    "tahun" => 2022
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung - Konstruksi"
    ]
    "jml" => array:1 [▶
      0 => "69"
    ]
  ]
  2 => array:3 [▶
    "tahun" => 2022
    "kategori_paket" => array:1 [▶
      0 => "Tender-Konstruksi"
    ]
    "jml" => array:1 [▶
      0 => "12"
    ]
  ]
  3 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung - Barang"
    ]
    "jml" => array:1 [▶
      0 => "30"
    ]
  ]
  4 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung - Jasa Lainnya"
    ]
    "jml" => array:1 [▶
      0 => "17"
    ]
  ]
  5 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung - Konstruksi"
    ]
    "jml" => array:1 [▶
      0 => "201"
    ]
  ]
  6 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Tender-Konstruksi"
    ]
    "jml" => array:1 [▶
      0 => "25"
    ]
  ]
  7 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Seleksi"
    ]
    "jml" => array:1 [▶
      0 => "5"
    ]
  ]
  8 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "e-Katalog"
    ]
    "jml" => array:1 [▶
      0 => "2"
    ]
  ]
  9 => array:3 [▶
    "tahun" => 2023
    "kategori_paket" => array:1 [▶
      0 => "Pengadaan Langsung-Konsultan"
    ]
    "jml" => array:1 [▶
      0 => "14"
    ]
  ]
]

如何按年份对 $hasil only 2 数组进行分组?所以只有2022年和2023年

我已经尝试了一切来解决这个问题。但我找不到答案 希望你们不能帮我解决这个问题 谢谢 。最好的问候

mysql laravel eloquent laravel-blade
2个回答
0
投票

这是调整后的代码:

    ->join('pengadaan', 'dokumen.id_jenis_pengadaan', '=', 'pengadaan.id')
    ->select(
        DB::raw('COUNT(DISTINCT nama_paket) AS jml'),
        DB::raw('jenis_pengadaan as jenis_pengadaan'),
        DB::raw('tahun as tahun')
    )
    ->groupBy('jenis_pengadaan', 'tahun')
    ->orderBy('tahun')
    ->get();

$hasil = [];
foreach ($results as $result) {
    $kategori = $result->jenis_pengadaan;
    $jml = $result->jml;
    $hasil[] = [
        'tahun' => $result->tahun,
        'kategori_paket' => $kategori,
        'jml' => $jml,
    ];
}

dd($hasil)

-1
投票

您可以修改循环以将具有相同

$result->tahun
值的条目收集在一起:

$hasil = [];
foreach ($results as $result) {
    $hasil[$result->tahun] = $hasil[$result->tahun] ?? [];
    $hasil[$result->tahun][] = [
        'tahun' => $result->tahun,
        'kategori_paket' => $result->jenis_pengadaan,
        'jml' => $result->jml,
    ];
}
© www.soinside.com 2019 - 2024. All rights reserved.