【问题标题】:How can I make order by before group by in laravel?如何在 laravel 中按 group by 之前订购?
【发布时间】:2017-10-04 08:51:37
【问题描述】:

我的情况与此相同:Sort data (order by) before group by in mysql

我在那里尝试了所有答案,我从@Justin 那里找到了最佳答案

mysql中的答案是这样的:

SELECT t1.*
FROM prd_data t1
WHERE t1.id = (SELECT t2.id
               FROM prd_data t2
               WHERE t2.sub_prd_id= t1.sub_prd_id
               ORDER BY t2.created_at DESC
               LIMIT 1)

我尝试过 sql 查询,它可以工作

但是如何将 sql 查询转换为 laravel eloquent?

我发现在 laravel eloquent 中转换 sql 查询很困难。因为查询很复杂

我该如何解决这个问题?

【问题讨论】:

  • 你为什么要把它转换成雄辩的?您可以简单地创建一个 MySQL 视图并让 eloquent 模型处理该视图。隐藏查询的复杂性。如果你诚实地把它改写成雄辩的,没有什么好处。
  • @Mjh,你是什么意思?尝试用代码回答。让我轻松理解你的意思
  • 我以为您熟悉 MySQL 以及视图是什么。如果人们不了解基本概念,我将不会提供复制粘贴代码供他们使用。我认为这不高效或不值得付出努力。我建议您环顾四周看看什么是视图,然后您很可能会得到我想要建议的内容。
  • @Mjh,看来我对使用视图不感兴趣。我想用雄辩的 laravel
  • 好吧,没问题,反正没有理由使用更简单、更干净的方法 :) 祝你好运!

标签: mysql laravel laravel-5 laravel-5.3 laravel-eloquent


【解决方案1】:

如果你想使用 sql 查询,你可以简单地使用 DB::select()

DB::select("SELECT t1.* FROM prd_data t1 WHERE t1.id = (SELECT t2.id
           FROM prd_data t2
           WHERE t2.sub_prd_id= t1.sub_prd_id
           ORDER BY t2.created_at DESC
           LIMIT 1)");

【讨论】:

    【解决方案2】:
    $whereClause = DB::table(‘prd_data’)->where(t2.sub_prd_id, t1.sub_prd_id)->orderBy(’t2.created_at’,’desc’)->take(1)->get();
    
    $result = DB::table(‘prd_data')->where(t1.id,$whereCond.id)->get();
    

    希望它有效:)

    【讨论】:

    • 看来会报错。因为它将首先运行$whereClause。在 $whereClause 内部时,t1.sub_prd_id 没有任何价值。我还没有尝试过。但这似乎是一个错误
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2021-11-03
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多