Die Kombination von UNION und LIMIT Operationen in MySQL-Abfrage
Frage
Ich habe eine Jobs und Unternehmen Tabelle, und ich will 20 Arbeitsplätze extrahieren, die die folgenden Kriterien erfüllen:
- Jobs nur von zwei (2) genannten Unternehmen
- Es kann höchstens 10 Arbeitsplätze pro Unternehmen
ich habe folgende SELECT
mit UNION DISTINCT
versucht, aber das Problem ist, dass der LIMIT 0,10
auf das gesamte Ergebnismenge gilt. Ich mag es jedem des Unternehmens anzuwenden.
Wenn es nicht mehr als 10 Arbeitsplätze pro Unternehmen sind, dann sollte die Abfrage alle zurückkehren, die Arbeitsplätze es findet.
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 zu können.
Lösung
die docs ,
Um ORDER BY oder LIMIT auf eine Anwendung einzelne SELECT, legen Sie die Klausel innerhalb der Klammern, die einschließen die 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);