Maison >base de données >tutoriel mysql >Comment obtenir la ligne la plus récente pour chaque identifiant de vendeur à l'aide de Laravel Eloquent ?

Comment obtenir la ligne la plus récente pour chaque identifiant de vendeur à l'aide de Laravel Eloquent ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 08:47:09973parcourir

How to Get the Most Recent Row for Each Seller ID Using Laravel Eloquent?

Comment sélectionner la dernière ligne pour chaque Seller_ID à l'aide de Laravel Eloquent

Problème

Vous avez une table qui contient des données avec les colonnes seller_id etcreated_at. Vous souhaitez récupérer uniquement les dernières lignes pour chaque seller_id distinct.

Solution

En utilisant le générateur de requêtes de Laravel Eloquent, vous pouvez y parvenir en utilisant une jointure gauche et une condition WhereNull. Voici comment :

$subquery = DB::table('snapshot')
    ->where('seller_id', '=', 's1.seller_id')
    ->whereRaw('s.created_at < s1.created_at');

$query = DB::table('snapshot as s')
    ->select('s.*')
    ->leftJoinSub($subquery, 's1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id');
    })
    ->whereNull('s1.seller_id')
    ->get();

Dans cette requête :

  1. La sous-requête identifie toutes les lignes de la table d'instantanés qui ont un horodatage de création_at postérieur à celui de la ligne actuelle.
  2. La jointure de gauche combine la ou les tables principales avec les résultats de la sous-requête (s1).
  3. La condition WhereNull élimine les lignes où existe une entrée correspondante dans la sous-requête. Cela filtre efficacement toutes les lignes sauf la dernière pour chaque seller_id.

En exécutant cette requête, vous obtiendrez une collection des dernières lignes pour chaque seller_id distinct dans la table d'instantanés.

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