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
Libérer: 2025-01-14 13:02:51
original
987 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal