首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Order by highest

Order by highest
EN

Stack Overflow用户
提问于 2020-01-23 18:33:09
回答 1查看 60关注 0票数 0

我有两张桌子,零件有很多报价。

我需要让所有的零件排序的报价最高的价格或数量,其中报价> 0和报价数量>0。

价格和数量是经过计算的字段。

如何做到这一点?

我试过了

代码语言:javascript
复制
Part::
addSelect([
  'quantity' => Offer::select('quantity')
    ->orderBy('quantity', 'desc')
    ->whereColumn('part_id', 'parts.id')
    ->limit(1)
])
->orderBy('quantity', 'desc')
->paginate(3)

但是这种方式我不能按数量>0和价格>0过滤零件。

另外,因为在执行此操作时,数量是计算字段

代码语言:javascript
复制
->addSelect([
    'qty' => Offer::select(['quantity * 2 as qty'])
        ->orderBy('qty', 'asc')
        ->whereColumn('part_id', 'parts.id')
        ->limit(1)
])

我收到引用'qty‘不受支持错误

更多解释:

每个部分都有许多报价。每个报价都有许多发货。Offer`s的

代码语言:javascript
复制
available_quantity = quantity - sum of shipped quantities

我需要显示available_quantity >0的部分并按available_quantity对部分进行排序

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 19:08:25

您可以按如下方式订购:

代码语言:javascript
复制
$shipping = Shipping::groupBy('offer_id')->select(DB::raw('SUM(quantity) AS sum_quantity'), 'offer_id', 'id');

Part::join('offers', 'offers.part_id', '=', 'parts.id')
    ->join(DB::raw("({$shipping->toSql()}) AS ship"), 'ship.offer_id', '=', 'offers.id')
    ->select('parts.*',DB::raw('MAX(offers.quantity - ship.sum_quantity) AS avaliable_quantity'))
    ->groupBy('part.id')
    ->orderBy('avaliable_quantity', 'desc')
    ->paginate(3)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59876455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档