Joindre des tables MySQL pour récupérer uniquement la ligne la plus récente
Dans les systèmes de gestion de données, joindre des tables est essentiel pour combiner des informations provenant de plusieurs sources. Lorsqu'il s'agit de données historiques, il devient souvent nécessaire de récupérer la ligne la plus récente de l'une des tables jointes.
Considérons le scénario d'une base de données client dans laquelle les données client sont stockées dans deux tables : customer et customer_data. La table customer contient des informations de base sur le client, tandis que customer_data stocke les modifications apportées au profil du client. Pour afficher les informations du client dans une table, les deux tables doivent être jointes, mais nous voulons uniquement la ligne la plus récente de customer_data.
Pour y parvenir, vous pouvez utiliser la fonction MAX() de MySQL avec une sous-requête. pour trouver l'ID de la ligne la plus récente dans customer_data. La requête ressemblerait à ceci :
SELECT c.*, cd.value FROM customer c LEFT JOIN customer_data cd ON c.customer_id = cd.customer_id WHERE cd.customer_id = ( SELECT MAX(customer_id) FROM customer_data WHERE customer_id = c.customer_id )
Cette requête récupère d'abord toutes les colonnes de la table customer (préfixées par c.). Il effectue ensuite un LEFT JOIN avec la table customer_data (préfixée par cd.), en filtrant les lignes de customer_data pour inclure uniquement celles avec le customer_id maximum pour chaque client (tel que déterminé par la sous-requête).
De plus, comme mentionné dans la requête de référence, vous pouvez utiliser CONCAT() avec LIKE pour rechercher des valeurs spécifiques dans des colonnes concaténées. Dans l’exemple de requête, CONCAT(title,' ',forename,' ',surname) est comparé à la chaîne '%Smith%'. Cela renverrait tous les noms de clients contenant la sous-chaîne « Smith » n'importe où dans le champ combiné.
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!