获取具有按字段分组的 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;
<?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);
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;
<?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);