Combinazione di operazioni UNION e LIMIT nella query MySQL
Domanda
Ho una Offerte di lavoro e una Società e desidero estrarre 20 lavori che soddisfano i seguenti criteri:
- Lavori solo di due (2) società denominate
- Possono esserci al massimo 10 lavori per azienda
Ho provato il seguente SELECT
con UNION DISTINCT
, ma il problema è che LIMIT 0,10
si applica all'intero set di risultati . Voglio che si applichi a ciascuna delle società.
Se non ci sono 10 lavori per azienda, la query dovrebbe restituire tutti i lavori che trova.
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
Sono nuovo di MySQL, quindi renditi conto che potrebbe esserci un modo più intelligente per farlo invece che con UNION, quindi eventuali suggerimenti per miglioramenti sono sicuramente benvenuti.
Soluzione
Citando i documenti ,
Per applicare ORDER BY o LIMIT a un SELECT individuale, inserire la clausola tra parentesi che racchiudono SELEZIONA:
(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);