2017-10-04 38 views
0

我的情况与此相同:Sort data (order by) before group by in mysql如何在laravel之前通过组前排序?

我尝试所有的答案那里,我找到@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雄辩?

我发现很难在laravel雄辩中转换sql查询。因为查询非常复杂

我该如何解决这个问题?

+0

为什么你将其转换为雄辩?你可以简单地创建一个MySQL视图,并用雄辩的模型来处理这个视图。隐藏查询的复杂性。如果你真诚地将其重写成雄辩,没有什么可以获得的。 – Mjh

+0

@Mjh,你是什么意思?尝试用代码回答。让我轻松理解你的观点 –

+0

我认为你对MySQL很熟悉,并且是一种观点。如果他们不了解基本概念,我将不会提供复制粘贴代码供人使用。我认为这不是生产力或值得付出的努力。我建议你四处看看看看是什么,然后你很可能会得到我想要建议的。 – Mjh

回答

1

您可以简单地使用DB ::选择(),如果你想使用SQL查询

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)"); 
0
$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(); 

希望工程:)

+0

看来这将是一个错误。因为它会首先运行'$ whereClause'。在'$ whereClause'里面,'t1.sub_prd_id'没有值。我还没有尝试过。但这似乎是一个错误 –

相关问题