使用 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中文网其他相关文章!