Laravel Eloquent : sélection de toutes les dernières lignes pour chaque seller_id
Considérez une table qui contient une transaction records:
L'objectif est de récupérer la dernière transaction pour chaque seller_id unique. Bien qu'il soit simple d'obtenir la transaction la plus récente pour un vendeur spécifique, le défi réside dans l'extraction des derniers enregistrements pour tous les vendeurs.
Approche de requête de base de données :
Une approche efficace La méthode consiste à utiliser une requête SQL :
select s.* from snapshot s left join snapshot s1 on s.seller_id = s1.seller_id and s.created_at < s1.created_at where s1.seller_id is null
Cette requête identifie la transaction la plus récente pour chaque seller_id en employant une auto-jointure et à l'exclusion des enregistrements avec une heure de création ultérieure.
Approche de Laravel Query Builder :
Pour obtenir le même résultat en utilisant Laravel Query Builder :
DB::table('snapshot as s') ->select('s.*') ->leftJoin('snapshot as s1', function ($join) { $join->on('s.seller_id', '=', 's1.seller_id') ->whereRaw('s.created_at < s1.created_at'); }) ->whereNull('s1.seller_id') ->get();
Ce code utilise une technique d'auto-jointure similaire à celle de la requête SQL, renvoyant la dernière transaction pour chaque seller_id.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!