获取具有按字段分组的 N 个子项目的模型

Get model with N child items grouped by field

Table 看起来像这样:

  id  ...  item_id  likes
  1          1       200
             1       300
             1       400
             1       4
  ...        2       54
             2       31
             3       22     

如何让点赞最多的 item_id 获得 3 个或更少的项目?
所以对于我的示例输出应该是这样的:

[
  item_id: 1,
  likes: 200,
],
[
  item_id: 1,
  likes: 300,
],
[
  item_id: 1,
  likes: 400,
],
[
  item_id: 2,
  likes: 54,
],
[
  item_id: 2,
  likes: 31,
],
[
  item_id: 3,
  likes: 22,
],

从 MySQL 8.0 开始,您可以使用 window 函数 row_number

with n as (
    select 
        id, item_id, likes, row_number() over (partition by item_id) rn
    from tbl
) select 
    item_id, likes 
from n 
where rn < 4;

Test Mysql window functions

<?php

$query = "with n as (
    select 
        id, item_id, likes, row_number() over (partition by item_id) rn
    from tbl
) select item_id, likes from n where rn < 4;";

// Select using Laravel
$rows = $db::select($db::raw($query));

var_export($rows);

Laravel DB query