簡體   English   中英

如何過濾groupBy()以僅在Laravel中的每個組中顯示最高值?

[英]How to filter the groupBy() to only show the highest value in every group in Laravel?

我收集這些數據的目的是讓孩子上最新的課。

我的桌子:

| id | child_id | class_id   |
|----|----------|------------|
| 1  | 1        | 15         |
| 2  | 2        | 18         |
| 3  | 1        | 19         |
| 4  | 1        | 17         |

預期結果:

| id | child_id | class_id   |
|----|----------|------------|
| 2  | 2        | 18         |
| 4  | 1        | 17         |

實際結果:

| id | child_id | class_id   |
|----|----------|------------|
| 1  | 1        | 15         |
| 2  | 2        | 18         |

我目前正在使用Enrolment::orderBy('id', 'desc')->groupBy('child_id')->get(); 但是,它不能正常工作。

試試這個代碼。

select * from  table1
where id in (
    select 
        Max(id) as t.id
    from table1 as t
    GROUP BY t.child_id ORDER BY t.id desc
)

這樣,它可以解決您的問題:

SELECT * FROM `table_name` WHERE `id` IN (SELECT MAX(`id`) FROM `table_name` GROUP BY `child_id`) 

您可以使用MAX顯示最高價值

 $response= Enrolment::groupBy('child_id')->get(['child_id', DB::raw('MAX(class_id) as class_ids')]);

並將結果打印為

echo "<pre>";
print_r($response->toArray());

輸出將是

Array
(
    [0] => Array
        (
            [child_id] => 1
            [class_ids] => 19
        )

    [1] => Array
        (
            [child_id] => 2
            [class_ids] => 18
        )

)

不要忘了導入use DB; 在控制器中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM