Maison >base de données >tutoriel mysql >Comment limiter efficacement les résultats par entreprise lors de l'utilisation d'UNION dans MySQL ?

Comment limiter efficacement les résultats par entreprise lors de l'utilisation d'UNION dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 13:02:51953parcourir

How to Efficiently Limit Results Per Company When Using UNION in MySQL?

Optimisation des requêtes MySQL avec UNION et LIMIT pour les recherches d'emploi multi-entreprises

Une récupération efficace des données à partir de grandes bases de données nécessite une construction minutieuse des requêtes. Cet exemple se concentre sur la récupération des offres d'emploi de plusieurs entreprises, en limitant les résultats à un maximum de 10 emplois par entreprise.

Une approche naïve utilisant UNION DISTINCT avec une seule clause LIMIT limitera le nombre total de résultats, et non les résultats par entreprise. La solution réside dans l'application de ORDER BY et LIMIT dans chaque instruction SELECT individuelle de la UNION requête :

<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 IN ('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 IN ('Company2')
ORDER BY name, title
LIMIT 0, 10
);</code>

Cette requête révisée garantit que la clause LIMIT fonctionne indépendamment sur les données d'emploi de chaque entreprise, renvoyant jusqu'à 10 emplois par entreprise. Notez l'utilisation de UNION ALL qui est généralement plus efficace que UNION DISTINCT à moins que des résultats distincts ne soient explicitement requis. Cette approche gère les cas où une entreprise compte moins de 10 emplois, renvoyant tous les emplois disponibles pour cette entreprise.

Pour une flexibilité accrue et des scénarios plus complexes, pensez à tirer parti de la fonction de fenêtre ROW_NUMBER() de MySQL. ROW_NUMBER() attribue un classement unique à chaque ligne au sein d'une partition définie (dans ce cas, par entreprise), permettant un filtrage et un regroupement sophistiqués des résultats.

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!

Déclaration:
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