【问题标题】:How to select max aggregate within a subquery with a join in eloquent如何在具有 eloquent 连接的子查询中选择最大聚合
【发布时间】:2017-07-06 19:41:38
【问题描述】:

我想选择最近的条目,但没有时间戳(created_at),可以通过选择主键上的最大值来识别它。问题在于子查询中的这一点,并且需要连接表。

查询是这样的:

        $prodarr = DB::table('onhand_inventory')
            ->leftJoin('mapping', 'onhand_inventory.sku', '=', 'mapping.sku')
            ->where('mapping.mid', function ($query) {
                $query->select('mapping.mid')->from('mapping')
                    ->whereRaw('onhand_inventory.sku = mapping.sku')
                    ->max('mapping.mid');
            })->leftJoin('order_products', 'order_products.sku', '=', 'onhand_inventory.sku')
            ->leftJoin('vendors', 'mapping.v_id', '=', 'vendors.vid')
            ->where('onhand_inventory.shipped_with_box', 0)
            ->groupBy('onhand_inventory.inv_id')
            ->orderBy('onhand_inventory.inv_id')
            ->get();

在执行上述查询时会抛出以下错误 找不到列:1054 'where 子句'中的未知列'onhand_inventory.sku'

如何获取 onhand_inventory 的数据以与子查询中的映射进行比较。

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    您已经加入了映射表,因此您不需要子查询。

    $prodarr = DB::table('onhand_inventory')
                ->leftJoin('mapping', 'onhand_inventory.sku', '=', 'mapping.sku')
               ->leftJoin('order_products', 'order_products.sku', '=', 'onhand_inventory.sku')
                ->leftJoin('vendors', 'mapping.v_id', '=', 'vendors.vid')
                ->where('onhand_inventory.shipped_with_box', 0)
                ->orderBy('mapping.mid', 'desc')
                ->groupBy('onhand_inventory.inv_id')
                ->orderBy('onhand_inventory.inv_id')
                ->limit(1)
                ->get();
    

    我没有运行代码,但我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多