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

标签 php mysql laravel

表格如下所示:

  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;

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

关于php - 获取具有按字段分组的 N 个子项的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72203032/

相关文章:

php - 关联数组插入Mysql

javascript - 将为客户端呈现的源代码保存为 .txt 文件

php - 如何使用 PHP 在邮件正文上发送 base64 图像?

mysql - 正在寻找一种简单且更好的方法来从大量用户 mysql 中选择一个值?

MySQL SELECT FROM a relation table WHERE 他们有相同的亲戚

PHP MVC 框架 Laravel 似乎出错 Artisan Serve

laravel - 防止 Laravel Eloquent 模型上的某些 CRUD 操作

PHP json_encode() 与空 NSDictionary

php - 错误号 : 1054 in php code igniter

php - 与 Laravel 8 上的 setKeysForSaveQuery() 覆盖不兼容的方法