Maison > base de données > tutoriel mysql > Comment récupérer l'enregistrement le plus récent pour chaque valeur unique dans Laravel Eloquent ?

Comment récupérer l'enregistrement le plus récent pour chaque valeur unique dans Laravel Eloquent ?

Linda Hamilton
Libérer: 2024-12-01 06:34:13
original
431 Les gens l'ont consulté

How to Retrieve the Most Recent Record for Each Unique Value in Laravel Eloquent?

Requête des enregistrements les plus récents avec Laravel Eloquent

Pour récupérer le dernier enregistrement pour chaque valeur unique dans une colonne de table donnée, l'ORM Eloquent de Laravel fournit une solution robuste. Passons en revue un scénario et sa solution éloquente :

Scénario :

Considérons une table nommée "instantané" avec des colonnes telles que "id", "seller_id", " montant" et "created_at". L'objectif est de récupérer la ligne la plus récente pour chaque "seller_id" distinct.

Requête éloquente :

$latestSales = Snapshot::select('seller_id')
    ->groupBy('seller_id')
    ->havingRaw('MAX(created_at)')
    ->orderBy('created_at', 'DESC')
    ->get();
Copier après la connexion

Explication :

  • groupBy('seller_id') : regroupe les résultats en fonction de la colonne "seller_id", en organisant les lignes avec les identifiants de vendeur correspondants.
  • havingRaw('MAX(created_at)') : filtre les résultats pour inclure uniquement les lignes qui ont la valeur "created_at" maximale dans chaque groupe d'identifiants de vendeur.
  • orderBy ("created_at", "DESC") : classe les résultats dans chaque groupe d'ID de vendeur par ordre décroissant de "created_at", en garantissant que le dernier enregistrement apparaisse d'abord.
  • get() : récupère les résultats de la base de données.

Requête alternative (requête brute) :

Si vous préférez, une requête SQL brute peut être utilisée pour obtenir le même résultat :

SELECT * FROM snapshot
WHERE (seller_id, created_at) IN (
    SELECT seller_id, MAX(created_at) AS max_created_at
    FROM snapshot
    GROUP BY seller_id
)
ORDER BY created_at DESC;
Copier après la connexion

Cette requête identifie la dernière ligne pour chaque "seller_id" utilisant une sous-requête pour déterminer la valeur maximale "created_at" au sein de chaque groupe. Les lignes avec des paires correspondantes de "seller_id" et "created_at" (représentant les derniers enregistrements) sont ensuite sélectionnées et classées par "created_at" par ordre décroissant, ce qui donne une liste des enregistrements les plus récents 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal