2009-09-12 14 views
44

Ho un Jobs e un Aziende tavolo, e voglio estrarre 20 posti di lavoro che soddisfano i seguenti criteri:La combinazione di operazioni LIMIT UNION e nella query MySQL

  1. Jobs solo da due (2) società citate
  2. Non ci possono essere al massimo di 10 posti di lavoro per azienda

ho provato il seguente SELECT con UNION DISTINCT, ma il problema è che t he 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 deve restituire tutti i lavori trovati.

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, in modo da realizzare ci può essere un modo più intelligente per fare questo invece che con UNION, in modo che qualsiasi proposte di miglioramento sono sicuramente il benvenuto.

risposta

114

Citando the docs,

Per applicare ORDER BY o limitare ad un individuo SELECT, inserire la clausola all'interno delle parentesi che racchiudono 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); 
+0

stavo andando da la documentazione di MySQL che diceva che l'ORDINE BY arrivava dopo l'UNIONE ..... e dimenticava le parentesi! Grazie –

+0

@Mauro, che ne dici di accettare la risposta, se ti risolve il problema, eh?! -) Usa il segno di "segno di spunta" sotto il numero di upvotes (attuale tre ...) ... –

+9

Questo funziona in MySql, ma non sembra che SQLite supporti questo nel caso qualcuno si imbattesse in questa domanda su google –

Problemi correlati