ホームページ >データベース >mysql チュートリアル >MySQL で UNION を使用するときに会社ごとの結果を効率的に制限するにはどうすればよいですか?
複数企業の求人検索のための UNION と LIMIT を使用した MySQL クエリの最適化
大規模なデータベースから効率的にデータを取得するには、慎重なクエリの構築が必要です。この例では、複数の企業から求人情報を取得することに重点を置き、結果を 1 企業あたり最大 10 件の求人に制限します。
単一の UNION DISTINCT
句で LIMIT
を使用する単純なアプローチでは、企業ごとの結果ではなく、結果の総数が制限されます。 解決策は、ORDER BY
クエリの個々の LIMIT
ステートメント内で SELECT
と UNION
を適用することです。
<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 ALL ( 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 );</code>
この改訂されたクエリにより、LIMIT
句が各企業の求人データに対して独立して動作し、企業ごとに最大 10 件の求人が返されるようになります。 明確な結果が明示的に必要でない限り、一般に UNION ALL
よりも効率的な UNION DISTINCT
の使用に注意してください。 このアプローチは、会社の求人数が 10 未満の場合を処理し、その会社で利用可能なすべての求人を返します。
柔軟性を高め、より複雑なシナリオを実現するには、MySQL の ROW_NUMBER()
ウィンドウ関数の活用を検討してください。 ROW_NUMBER()
は、定義されたパーティション (この場合は会社ごと) 内の各行に一意のランクを割り当て、高度な結果のフィルタリングとグループ化を可能にします。
以上がMySQL で UNION を使用するときに会社ごとの結果を効率的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。