Maison >base de données >tutoriel mysql >Comment sélectionner efficacement la dernière transaction pour chaque vendeur à l'aide de Laravel Eloquent ?

Comment sélectionner efficacement la dernière transaction pour chaque vendeur à l'aide de Laravel Eloquent ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 20:36:11402parcourir

How to Efficiently Select the Latest Transaction for Each Seller Using Laravel Eloquent?

Laravel Eloquent : sélection de toutes les dernières lignes pour chaque seller_id

Considérez une table qui contient une transaction records:

  • id
  • seller_id
  • amount
  • created_at

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn