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的值,谢谢你的帮助!