You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将下述UNION ALL结构SQL转换为Laravel查询语句

Laravel查询构造器实现分组取指定条数后UNION ALL的方法

你给出的原生SQL核心逻辑是针对fk_car_model_id的不同取值,分别查询对应条数的记录后用UNION ALL合并,用Laravel查询构造器实现时要注意每个子查询的LIMIT必须独立设置,不能把限制条件写到外层查询,否则会出现逻辑偏差。

实现代码

直接使用查询构造器编写的对应代码如下,生成的SQL和你给出的原生语句完全一致:

// 第一个分组:fk_car_model_id = 3 取5条
$query1 = DB::table('models')
    ->where('fk_car_model_id', 3)
    ->limit(5);

// 第二个分组:fk_car_model_id = 2 取3条
$query2 = DB::table('models')
    ->where('fk_car_model_id', 2)
    ->limit(3);

// 第三个分组:fk_car_model_id = 1 取2条
$query3 = DB::table('models')
    ->where('fk_car_model_id', 1)
    ->limit(2);

// 合并所有子查询,作为临时表查询最终结果
$finalResult = DB::query()
    ->fromSub(
        $query1->unionAll($query2)->unionAll($query3),
        'models'
    )
    ->select('models.*')
    ->get();

注意事项

  • 如果你是用Eloquent模型操作,把代码里的DB::table('models')替换成对应模型的查询实例即可,比如\App\Models\Models::query(),其余写法不需要调整。
  • 不要在链式调用unionAll()之后直接调用get(),这种写法生成的SQL会把LIMIT条件作用于整个合并后的结果集,和每个分组单独限制条数的需求不符。
  • 如果需要新增其他分组规则,只需要新增对应带where条件、limit限制的子查询,再通过unionAll()追加到合并链中即可。

内容的提问来源于stack exchange,提问作者Dipali Sakle Systematix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:54:22