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

如何按两种不同参数类型排序数据?含Halal标签与库存排序需求

解决方法:自定义优先级排序

你的核心需求是先按「是否满足Halal标签+库存>40」的条件排序,再按库存降序,原代码用havingRaw是错误的——havingRaw用于过滤聚合查询(比如带GROUP BY)的结果,无法控制排序优先级,还会直接过滤掉不满足条件的数据,不符合你「优先展示而非过滤」的需求。

正确做法是通过orderByRaw实现自定义排序规则:

$data = $data->orderByRaw("CASE WHEN halal = 1 AND product > 40 THEN 1 ELSE 0 END DESC")
             ->orderBy('product', 'desc');

代码说明:

  • CASE WHEN halal = 1 AND product > 40 THEN 1 ELSE 0 END:生成临时排序字段,满足条件的产品赋值为1,不满足的赋值为0
  • 第一个DESC:让赋值为1的产品排在最前面,实现优先展示的需求
  • 后续的orderBy('product', 'desc'):保证同一优先级内的产品,按库存从高到低排序

注意点:

  • 确认数据库中库存字段名确实是product,避免因字段名错误导致逻辑失效
  • 若使用非MySQL数据库(如PostgreSQL),CASE语句语法略有差异,但核心逻辑一致,只需调整对应语法即可

内容的提问来源于stack exchange,提问作者Reza Gunadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:06