【问题标题】:Subquery with eloquent model in laravel 5laravel 5中具有雄辩模型的子查询
【发布时间】:2020-10-06 14:28:05
【问题描述】:

我有以下原始查询:

select * 
from (select * from settings order by priority desc) x
group by name

我想改用 laravel 5 查询生成器,但无法让子查询工作。有没有办法在不使用原始查询的情况下做到这一点?

桌子:

id - name - priority
1    1      1
2    1      2
3    2      1

在上述情况下,它将像我想要的那样返回第 2 行和第 3 行

我试过这个查询:

$settings = \App\Setting::where('user_id', Auth::id())->orWhere('tool_id', $id)->groupBy('name')->orderBy('priority', 'desc')->get();

但这将返回第 1 行和第 3 行。

【问题讨论】:

  • 这没有意义,只需使用子选择。没有理由按名称分组,因为您没有汇总任何其他字段
  • @RichBenner 为了更清晰,我编辑了我的帖子
  • 尝试 Query Builder 而不是 Eloquent 就像这个答案 stackoverflow.com/a/31864088/3018183

标签: sql laravel-5


【解决方案1】:

你会使用 CTE 表达式吗? RANK() 会起作用:

WITH CTE AS
(
  SELECT *, RANK() OVER(PARTITION BY name ORDER BY priority desc) AS RowRank 
  FROM settings
)
SELECT id, name, priority
FROM CTE c
WHERE c.RowRank = 1

【讨论】:

  • 查询已经生效。我只想将其转换为查询生成器,但没有运气
猜你喜欢
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2017-05-24
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多