Php groupBy和orderBy Laravel用于获取更高的价值

Php groupBy和orderBy Laravel用于获取更高的价值,php,sql,laravel,Php,Sql,Laravel,对查询结果进行分组和排序时出现问题。 这是我的数据 +--------+-----------+----------+--------+-------+ | id_krs | id_mhs_pt | id_kelas | status | nilai | +--------+-----------+----------+--------+-------+ | 38 | 3 | 29 | B | A | | 45 | 3

对查询结果进行分组和排序时出现问题。 这是我的数据

+--------+-----------+----------+--------+-------+
| id_krs | id_mhs_pt | id_kelas | status | nilai |
+--------+-----------+----------+--------+-------+
|     38 | 3         |  29      | B      | A     |
|     45 | 3         |  30      | B      | A     |
|     46 | 3         |  31      | B      | C     |
|  18393 | 3         |  31      | U      | A     |
+--------+-----------+----------+--------+-------+
这是我的问题

DB::table('krs')->select('id_krs','id_mhs_pt','id_kelas','status','nilai')
    ->where('id_mhs_pt',3)->groupBy('id_kelas')->orderBy('nilai','asc')->get();
当我运行查询时,结果是:

+--------+-----------+----------+--------+-------+
| id_krs | id_mhs_pt | id_kelas | status | nilai |
+--------+-----------+----------+--------+-------+
|     38 | 3         |  29      | B      | A     |
|     45 | 3         |  30      | B      | A     |
|     46 | 3         |  31      | B      | C     |
+--------+-----------+----------+--------+-------+
我想要的结果是

+--------+-----------+----------+--------+-------+
| id_krs | id_mhs_pt | id_kelas | status | nilai |
+--------+-----------+----------+--------+-------+
|     38 | 3         |  29      | B      | A     |
|     45 | 3         |  30      | B      | A     |
|  18393 | 3         |  31      | U      | A     |
+--------+-----------+----------+--------+-------+

因为id_krs 18393的nilai(分数)比id_krs 46(两者使用相同的id_kelas)更高。我试图将顺序更改为asc或desc,但结果仍然相同。怎么弄到的?谢谢你

问题在于您在
分组依据
上松开了
顺序
,因此必须使用临时表为每个
id\u kelas
获取最小
nilai
,然后加入该表以获取其他列:

DB::table('krs')
    ->select('id_krs', 'id_mhs_pt', 'id_kelas', 'status', 'nilai')
    ->leftJoin(
        DB::raw('(select id_krs, min(nilai) as m_nilai FROM krs GROUP BY id_kelas) tmp'), function ($join) {
            $join
                ->on(DB::raw('tmp.id_krs'), '=', DB::raw('krs.id_krs'))
                ->on(DB::raw('tmp.m_nilai'), '=', DB::raw('krs.nilai'));
        }
    )
    ->where('id_mhs_pt', 3)
    ->orderBy('nilai', 'asc')
    ->get();

什么
Laravel
version?@ConstantinGALBENU Laravel 5.2请查看我的答案并让我知道。谢谢你的答案,但它返回的值与我的数据几乎相同(4行),不同之处在于顺序,id_krs的结果顺序是38、45、18393,46.无论如何,我解决了我的问题,又创建了一个表来存储nilai的值,谢谢你的帮助!