2009-09-12 3 views
44

Ich habe ein Jobs und eine Firmen Tisch, und ich will 20 Arbeitsplätze extrahieren, die die folgenden Kriterien erfüllen:UNION und LIMIT Operationen in MySQL Query-Kombination

  1. Jobs nur von zwei (2) genannten Unternehmen
  2. Es kann höchstens sein 10 Arbeitsplätze pro Unternehmen

ich folgendes SELECT mit UNION DISTINCT versucht haben, aber das Problem ist, dass t Er LIMIT 0,10 gilt für die gesamte Ergebnismenge. Ich möchte, dass es für jedes der Unternehmen gilt.

Wenn es nicht 10 Jobs pro Firma gibt, sollte die Abfrage alle gefundenen Jobs zurückgeben.

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 

Ich bin neu in MySQL, so zu erkennen, kann es zu einer intelligenteren Weg, dies mit UNION statt zu tun, also irgendwelche Vorschläge für Verbesserungen sind auf jeden Fall begrüßen.

Antwort

114

the docs Zitiert,

Um ORDER BY oder LIMIT auf ein einzelnen SELECT anwenden, legen Sie die Klausel in den Klammern, die die SELECT umschließen:

(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

Ich wollte durch Die MySQL-Dokumentation, die ORDER BY genannt wurde, kam nach der UNION ..... und vergaß die Klammern! Danke –

+0

@Mauro, das ist ein Problem, das auf dem richtigen Weg ist, oder? -) Usa il segno di "checkmark" sotto il numero di upotes (attualmente tre ...) ... –

+9

Dies funktioniert in MySql, aber es sieht nicht so aus, als würde SQLite dies unterstützen, falls irgendjemand diese Frage auf google –