【问题标题】:How Can I get Min or Max value from Union result with Laravel Query Builder?如何使用 Laravel 查询生成器从联合结果中获取最小值或最大值?
【发布时间】:2018-09-19 06:34:06
【问题描述】:

我想从联合表中获取最小值。

如下所示的 MySQL 查询。

SELECT MIN(PromisedDate) 
FROM (SELECT PromisedDate FROM JobWorkOrder WHERE `PromisedDate` IS NOT NULL
    UNION
    SELECT ScheduledDate AS PromisedDate FROM JobPhase WHERE `ScheduledDate` IS NOT NULL) ScheduledTable;

此查询的结果是 JobWorkOrder 和 JobPhase 表中 PromisedDate 和 ScheduledDate 的最小值。

所以我构建了一个如下所示的 Laravel 查询。

$JobPhase = JobPhase::where('ScheduledDate', '<>', null)
    ->select('ScheduledDate AS PromisedDate');

$minDate = JobWorkOrder::where('PromisedDate', '<>', null)
    ->select('PromisedDate')
    ->union($JobPhase)
    ->min('PromisedDate');

但是我得到了错误的结果。 结果是

(SELECT MIN(`PromisedDate`) FROM `JobWorkOrder` WHERE `PromisedDate` IS NOT NULL) 
union 
(SELECT `ScheduledDate` AS `PromisedDate` FROM `JobPhase` WHERE `ScheduledDate` IS NOT NULL)

如何构建 Laravel 查询?

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

    您可以从 get() 函数结果中获取 min。 只需在查询中添加一个 get() 函数即可。

    $JobPhase = JobPhase::where('ScheduledDate', '<>', null)
        ->select('ScheduledDate AS PromisedDate');
    
    $minDate = JobWorkOrder::where('PromisedDate', '<>', null)
        ->select('PromisedDate')
        ->union($JobPhase)
        ->get()
        ->min('PromisedDate');
    

    然后你会得到一个 MIN 值。

    【讨论】:

      【解决方案2】:

      min 字段是从子查询中选择的:

      $JobPhase = JobPhase::where('ScheduledDate', '<>', null)
          ->select('ScheduledDate AS PromisedDate');
      
      $sub = $JobWorkOrder = JobWorkOrder::where('PromisedDate', '<>', null)
          ->select('PromisedDate')
          ->union($JobPhase);
      
      $minDate = DB::table( DB::raw("({$sub->toSql()}) as sub") )
          ->mergeBindings($sub->getQuery())
          ->min('PromisedDate');
      

      另请参阅:How to select from subquery using Laravel Query Builder?

      【讨论】:

        猜你喜欢
        • 2019-09-01
        • 2020-03-29
        • 2013-10-26
        • 2022-11-25
        • 2023-03-06
        • 2019-03-13
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        相关资源
        最近更新 更多