使用 UNION 和 LIMIT 最佳化 MySQL 查詢以進行多公司職位搜尋
從大型資料庫中有效地檢索資料需要仔細的查詢建構。此範例重點在於從多個公司獲取職位列表,將結果限制為每個公司最多 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中文網其他相關文章!