Combinaison des opérations UNION et LIMIT dans une requête MySQL
Question
J'ai un travail et un tableau Sociétés , et je souhaite extraire 20 emplois répondant aux critères suivants:
- Emplois uniquement auprès de deux (2) entreprises nommées
- Il peut y avoir au plus 10 emplois par entreprise
J'ai essayé le SELECT
suivant avec UNION DISTINCT
, mais le problème est que le LIMIT 0,10
s'applique à l'ensemble des résultats. . Je veux qu'il s'applique à chacune des entreprises.
S'il n'y a pas 10 emplois par entreprise, la requête doit renvoyer tous les travaux trouvés.
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 DISTINCT
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
Je suis nouveau dans MySQL, alors sachez qu’il existe peut-être un moyen plus intelligent de le faire plutôt qu'avec UNION. Toute suggestion d’amélioration est donc la bienvenue.
La solution
Citant les les documents ,
Pour appliquer ORDER BY ou LIMIT à un SELECT individuel, placez la clause à l'intérieur des parenthèses qui entourent le SELECT:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);