2009-09-12 41 views
44

Tôi có một Jobsty bảng, và tôi muốn trích xuất 20 công việc đáp ứng các tiêu chí sau:Kết hợp UNION và các hoạt động LIMIT trong truy vấn MySQL

  1. Jobs chỉ từ hai (2) các công ty có tên
  2. có thể nhiều nhất là 10 việc làm mỗi công ty

tôi đã thử những điều sau SELECT với UNION DISTINCT, nhưng vấn đề là t ông LIMIT 0,10 áp dụng cho toàn bộ tập hợp kết quả. Tôi muốn nó áp dụng cho từng công ty.

Nếu không có 10 công việc cho mỗi công ty, thì truy vấn sẽ trả về tất cả công việc mà nó tìm thấy.

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 

Tôi mới sử dụng MySQL, vì vậy hãy nhận ra có cách thông minh hơn để thực hiện việc này thay vì với UNION, vì vậy mọi đề xuất cải tiến chắc chắn được hoan nghênh.

Trả lời

114

Trích dẫn the docs,

Để áp dụng ORDER BY hoặc LIMIT một cá nhân SELECT, đặt mệnh đề bên trong dấu ngoặc đơn mà kèm theo 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

tôi đã đi bằng tài liệu MySQL cho biết ORDER BY đến sau UNION ..... và quên mất các dấu ngoặc đơn! Cảm ơn –

+0

@Mauro, che ne dici di accettare la risposta, se be risolve il problema, eh?! -) Usa il segno di "dấu kiểm" sotto il numero di upvotes (attualmente tre ...) ... –

+9

Điều này hoạt động trong MySql, nhưng nó không giống như SQLite hỗ trợ điều này trong trường hợp bất cứ ai chạy vào câu hỏi này trên google –

Các vấn đề liên quan