繁体   English   中英

如何在 PHP 中进行 sql 嵌套/子查询

[英]How to make sql nested/sub query in PHP

我正在努力在我的 php 代码中实现 SQL 查询。

查询:

select template_id, min(created_at) as created_at from (
select distinct 
root_template_id as template_id, 
date_created as created_at, 
response_id as response_id
from db.score
inner join db.users ON db.score.supplier_id = db.users.old_id
inner join db.acc ON db.acc.user_id = db.users.id
where db.acc.account_id = 25) as T
group by template_id

我只能准备这部分:

$query = DB::table('score')
->selectRaw('DISTINCT root_template_id as template_id, date_created as created_at, response_id') 
->join('users', 'score.supplier_id', '=', 'users.old_id')
->join('acc', 'acc.user_id', '=', 'users.id')
->whereIn('acc.account_id', $request->id)

它可以工作,但它只负责嵌套部分,如果我可以这样调用它,则负责子查询。 有人可以分享任何想法吗?

DB::table()通常以字符串形式接收表名,但它也可以接收ClosureIlluminate\\Database\\Query\\Builder实例,因此这应该可以为 Laravel 从子查询中选择:

DB::table(function ($query) use ($request) {
    $query->selectRaw('DISTINCT root_template_id as template_id, date_created as created_at, response_id')
    ->from('score')
    ->join('users', 'score.supplier_id', '=', 'users.old_id')
    ->join('acc', 'acc.user_id', '=', 'users.id')
    ->whereIn('acc.account_id', $request->id)
}, 'T')
    ->select([
        'template_id',
        DB::raw("MIN(created_at) AS created_at"),
    ])
    ->groupBy('template_id')
    ->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM