JobsおよびCompaniesテーブルがあり、次の条件を満たす20個のジョブを抽出したい:
UNION DISTINCT
で次のSELECT
を試しましたが、問題は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の代わりにこれを行うスマートな方法があるかもしれないので、改善のための提案は絶対に歓迎します。
引用 ドキュメント 、
ORDER BYまたはLIMITを個々のSELECTに適用するには、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);