Объединение операций UNION и LIMIT в запросе MySQL - PullRequest
56 голосов
/ 12 сентября 2009

У меня есть таблица Jobs и Companies , и я хочу извлечь 20 вакансий, которые соответствуют следующим критериям:

  1. Работа только от двух (2) названных компаний
  2. В компании может быть не более 10 рабочих мест

Я пробовал следующее SELECT с UNION DISTINCT, но проблема в том, что LIMIT 0,10 применяется ко всему набору результатов. Я хочу, чтобы это относилось к каждой из компаний.

Если в одной компании не существует 10 заданий, запрос должен вернуть все найденные задания.

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

Я новичок в MySQL, поэтому понимаю, что может быть более разумный способ сделать это вместо UNION, поэтому любые предложения по улучшению обязательно приветствуются.

1 Ответ

142 голосов
/ 12 сентября 2009

Цитирование Документы ,

Чтобы применить ORDER BY или LIMIT к индивидуальный 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);
...