Maison >base de données >tutoriel mysql >Comment limiter efficacement les résultats par entreprise lors de l'utilisation d'UNION dans 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!