Étant donné deux tables, customer et customer_data, où cette dernière contient un enregistrement historique des modifications des clients, la tâche à accomplir est de récupérer informations client tout en garantissant que seule l'entrée la plus récente de customer_data est jointe à chaque client dans la table customer.
Pour ce faire, envisagez d'utiliser la clause WHERE au lieu de la corps de requête principal, car il offre de meilleures performances et une meilleure lisibilité du code. Voici une requête optimisée :
SELECT c.*, CONCAT(title, ' ', forename, ' ', surname) AS name FROM customer c LEFT JOIN customer_data d ON c.customer_id = d.customer_id WHERE d.customer_id = ( SELECT MAX(customer_id) FROM customer_data WHERE customer_id = c.customer_id ) LIMIT 10, 20;
Cette requête garantit que seule la ligne la plus récente de customer_data est jointe pour chaque client dans customer en la filtrant dans la clause WHERE. Le LEFT JOIN garantit que tous les clients de customer sont inclus dans les résultats, même s'ils n'ont pas d'entrée correspondante dans customer_data.
En ce qui concerne vos préoccupations concernant l'utilisation conjointe de CONCAT et LIKE, vous avez raison. CONCAT concatène les chaînes et la chaîne résultante peut être utilisée avec l'opérateur LIKE pour effectuer une correspondance de modèles. Votre requête est valable sous cet aspect.
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!