Skip to content

Instantly share code, notes, and snippets.

@guanguans
Last active December 15, 2022 07:55
Show Gist options
  • Save guanguans/55afcfcda33bc3c14f6bc13f5b1bf8a1 to your computer and use it in GitHub Desktop.
Save guanguans/55afcfcda33bc3c14f6bc13f5b1bf8a1 to your computer and use it in GitHub Desktop.
groupByTopN
<?php
// 子查询
ServerNotice::query()
  ->select('*')
  ->whereRaw('(SELECT COUNT(*) FROM xb_server_notice AS sn WHERE xb_server_notice.zone_id = sn.zone_id AND xb_server_notice.updated_at < sn.updated_at) < 2')
  ->orderBy('zone_id')
  ->orderByDesc('updated_at')
  ->get()
  ->dd();

// 左链接
ServerNotice::query()
  ->select('server_notice.*')
  ->leftJoin('server_notice as b', function ($join){
    $join->on('server_notice.zone_id', '=', 'b.zone_id')
      ->on('server_notice.updated_at', '<', 'b.updated_at');
  })
  ->groupBy('server_notice.id')
  ->havingRaw('COUNT(*) < 2')
  ->orderBy('server_notice.zone_id')
  ->orderByDesc('server_notice.updated_at')
  ->get()
  ->dd();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment