Requête éloquente pour sélectionner les dernières lignes regroupées par vendeur
Étant donné un tableau composé d'informations relatives au vendeur, y compris les horodatages create_at, il est souvent nécessaire de récupérer uniquement les entrées les plus récentes pour chaque vendeur. Cette tâche peut être accomplie efficacement en utilisant Laravel Eloquent.
Pour y parvenir, nous pouvons utiliser une sous-requête MySQL qui identifie la dernière ligne pour chaque seller_id à l'aide d'une jointure gauche et d'une correspondance NULL. Cette sous-requête peut ensuite être utilisée en conjonction avec Eloquent pour récupérer les données souhaitées.
En SQL, la requête ressemblerait à ceci :
<code class="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
Traduit en Laravel Eloquent, la requête serait écrit comme suit :
<code class="php">DB::table('snapshot as s') ->select('s.*') ->leftJoin('snapshot as s1', function ($join) { $join->on('s.seller_id', '=', 's1.seller_id') ->whereRaw(DB::raw('s.created_at < s1.created_at')); }) ->whereNull('s1.seller_id') ->get();</code>
Cette requête récupère la dernière ligne d'instantané pour chaque seller_id unique à l'aide de la sous-requête, garantissant que les résultats renvoyés représentent les informations les plus à jour pour chaque vendeur.
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!