Maison >base de données >tutoriel mysql >Comment combiner efficacement UNION et LIMIT dans MySQL pour récupérer des données de plusieurs tables ?
Optimisation des requêtes MySQL : combiner UNION et LIMIT pour la récupération de données multi-tables
Récupérer des données de plusieurs tables nécessite souvent de combiner les résultats à l'aide de UNION
et de limiter le nombre de lignes avec LIMIT
. Ce guide démontre une approche efficace pour y parvenir.
Considérons un scénario dans lequel vous devez extraire un total de 20 offres d'emploi de deux entreprises spécifiques, avec un maximum de 10 emplois par entreprise. La requête optimisée suivante accomplit cela :
<code class="language-sql">( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company1' ORDER BY name, title LIMIT 0, 10 ) UNION ALL ( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company2' ORDER BY name, title LIMIT 0, 10 )</code>
La clé de l'efficacité réside dans le placement de LIMIT
dans chaque déclaration SELECT
individuelle. Cela garantit que les résultats de chaque entreprise sont limités indépendamment à 10 lignes. L'opérateur UNION ALL
(utilisé ici pour la vitesse ; UNION
supprimerait les doublons) combine ensuite ces ensembles de résultats limités, garantissant un maximum de 20 lignes dans la sortie finale.
La clause ORDER BY
dans chaque sous-requête conserve les résultats triés par nom d'entreprise et titre de poste avant l'opération syndicale. Cela garantit que l’ensemble de résultats combiné final reste trié. Cette méthode est bien plus efficace que d'appliquer LIMIT
après l'opération UNION
, ce qui nécessiterait de traiter tous les résultats avant d'appliquer la limite.
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!