Maison >base de données >tutoriel mysql >Comment limiter les résultats par table lors de l'utilisation de l'opérateur UNION de MySQL ?
Utilisation combinée des opérateurs UNION et LIMIT dans MySQL
Lors de l'interrogation de données de plusieurs tables à l'aide de l'opérateur UNION, vous devrez peut-être appliquer l'opérateur LIMIT à chaque ensemble de résultats séparément. Ceci est accompli en plaçant LIMIT entre parenthèses entourant chaque instruction SELECT.
L'exemple suivant est conçu pour extraire 20 emplois de deux entreprises spécifiques, avec une limite de 10 emplois par entreprise :
Exemple incorrect :
<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') UNION 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 20;</code>
Le LIMIT 20 du code ci-dessus agit sur le jeu de résultats après UNION, pas sur une seule instruction SELECT.
Exemple correct :
<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 10) UNION (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 10);</code>
En entourant chaque instruction SELECT de parenthèses et en appliquant LIMIT 10 individuellement, nous limitons efficacement les résultats aux 10 premières positions de chaque entreprise. Si une entreprise compte moins de 10 postes, la requête renverra toujours tous les résultats disponibles.
Cette approche suit les instructions de la documentation selon lesquelles "Pour appliquer ORDER BY ou LIMIT à un seul SELECT, placez la clause entre parenthèses entourant le SELECT". Il convient de noter que cette méthode trie et restreint uniquement chaque sous-requête et que le tri des résultats finaux nécessite un traitement supplémentaire. Si vous devez trier les résultats finaux fusionnés, vous devez ajouter une autre instruction ORDER BY au niveau le plus externe.
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!