【问题标题】:Select statement into another select To Eloquant选择语句到另一个选择 To Eloquant
【发布时间】:2015-12-01 09:01:10
【问题描述】:

如何将这样的 SQL 查询转换为 Eloquent 或 QueryBuilder :

SELECT * FROM studies
where studies.id in(SELECT study_id FROM (
SELECT max(studies.end_date), studies.id as study_id
from  workers inner join resumes on workers.id=resumes.worker_id
inner join studies on resumes.id=studies.resume_id where
resumes.title="main" group by workers.id) as SQ2

或全局

我们如何以 eloquant 为例从其他 select 语句中进行选择:

SELECT a.id from (SELECT * FROM A INNER JOIN B ON a.id=b.id where a.id > 10) as SUBQ1

【问题讨论】:

  • 为什么在嵌套查询中返回 max(end_date)?
  • 我想得到每个工人的最后一个编队,一个工人可能有几个编队。所以,我尝试只选择最后一个。

标签: mysql sql eloquent


【解决方案1】:

我认为您当前的查询在所有情况下都没有得到最大 end_date 的 study_id,您可以试试这个:

SELECT * FROM studies
where studies.end_date in (
SELECT max(studies.end_date)
from  workers inner join resumes on workers.id=resumes.worker_id
inner join studies on resumes.id=studies.resume_id where
resumes.title="main" group by workers.id) 

如果你想用 laravel Eloquant 实现它,你可以这样做:

$result = DB::table('studies')
    ->select("*")
    ->whereIn('end_date', function($query){
    $query->selectRaw("max(studies.end_date) as max_date")
    ->from('workers')
    ->join('resumes', 'workers.id', '=', 'resumes.worker_id')
    ->join('studies', 'resumes.id', '=', 'studies.resume_id')
    ->where('resumes.title', '=', 'main')
    ->groupBy('workers.id');
    })
    ->get();
foreach($result as $row) {
        print_r($row);
    }

【讨论】:

  • 它适用于我的 Sql syntex,但是,在 eloquent 中,我没有找到将 select 放入另一个 select 语句的解决方案。 Globaly,我的问题是如何从另一个选择的结果中进行选择:Select A FROM (Select C.A,MAX(C.PRICE) FROM products) as Q2
猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 2019-12-30
  • 2019-06-03
  • 2019-03-21
  • 2021-08-04
  • 2012-06-06
  • 2010-10-03
相关资源
最近更新 更多