表格如下所示:
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 开始,您可以使用窗口函数 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);
关于php - 获取具有按字段分组的 N 个子项的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72203032/