MySQL で UNION 操作と LIMIT 操作を組み合わせると、企業ごとの結果の数が制限されます
目標は、指定した 2 社から特定の条件に一致する 20 件の求人を取得することですが、結果の数は 1 社あたり最大 10 件に制限されます。 UNION DISTINCT と LIMIT を使用すると、後者が各企業の個別の結果セットではなく結果セット全体に影響を与えるため、問題が発生します。
次の解決策はこの問題を解決します:
<code class="language-sql">((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') ORDER by name, title LIMIT 0, 10) UNION (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)) ORDER BY name;</code>
重要な調整は、結合された結果セットに LIMIT 句を適用するのではなく、個々の SELECT ステートメント内で LIMIT 句をネストすることです。これにより、結果は 1 社あたり最大 10 件に制限されます。次に、別の外側の ORDER BY ステートメントを使用して、最終的に結合された結果セットを会社名で並べ替えます。
MySQL は UNION の後に ORDER BY を適用するため、結合された結果セットをソートするには別の ORDER BY が必要であることに注意してください。
以上がMySQL で UNION を使用するときに会社ごとの結果を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。