【发布时间】:2021-03-25 10:52:30
【问题描述】:
我有以下查询:
SELECT
cd_4.userfield,
COUNT( DISTINCT (Case When cd_4.disposition_Last = 'ANSWERED' Then cd_4.uniqueid ELSE NULL END) ) AS Answered_Count,
COUNT( DISTINCT (Case When cd_4.disposition_Last <> 'ANSWERED' Then cd_4.uniqueid ELSE NULL END) ) AS Not_Answered_Count
FROM (
SELECT
cd_2.Userfield,
cd_2.Start_Date,
cd_2.uniqueid,
cd_2.Row_Id_Max,
cd_3.disposition AS disposition_Last
FROM (
SELECT
cd_1.userfield,
cd_1.Start_Date,
cd_1.uniqueid,
MAX(cd_1.Row_Id) AS Row_Id_Max
FROM
cdrnew As cd_1
WHERE (
cd_1.Start_Date BETWEEN '2020-12-01' AND '2020-12-10'
)
AND cd_1.userfield = 'Inbound'
GROUP BY
cd_1.userfield,
cd_1.Start_Date,
cd_1.uniqueid
) AS cd_2
INNER JOIN cdrnew As cd_3
ON cd_3.Row_Id = cd_2.Row_Id_Max
WHERE (
cd_3.Start_Date BETWEEN '2020-12-01' AND '2020-12-10'
)
AND cd_3.userfield = 'Inbound'
) AS cd_4 ;
我有 4 个别名用于上述表 cdrnew,名为 cd_1、cd_2、cd_3 和 cd_4
我想使用 laravel 查询构建器实现同样的目的:
我尝试了以下 laravel 查询:
$sqlquery = DB::table('cdrnew')->select('cdrnew.userfield')
->addSelect(DB::raw('COUNT(DISTINCT (
Case When cdrnew.disposition = "ANSWERED" Then cdrnew.uniqueid ELSE NULL END
)) as Answered_Count'))
->addSelect(DB::raw('COUNT(DISTINCT (
Case When cdrnew.disposition <> "ANSWERED" Then cdrnew.uniqueid ELSE NULL END
)) as Not_Answered_Count'))
->addSelect(DB::raw('cdrnew.Start_Date, cdrnew.uniqueid, MAX(cdrnew.Row_Id) AS Row_Id_Max'))
->whereBetween('cdrnew.Start_Date', ["2020-12-12", "2020-12-15"])
->groupBy('userfield','Start_Date','uniqueid')
->join('cdrnew AS cd_1',"cdrnew.Row_Id", "=", "cd_1.Row_Id")
->limit(10)->get();
但我只能创建两个别名。一个是 DB::Table(cdrnew) 的默认值,另一个是 join(cd_1) 的默认值。我们如何在 laravel 中创建多个 'from' 语句以及不同的别名?
例如:
- 从 cdrnew 作为 cd_1(别名 1)。
- 来自 cdrnew 作为 cd_2(别名 2)。
- 来自 cdrnew 作为 cd_3(别名 3)。
- .....等等
【问题讨论】:
标签: php laravel laravel-5 laravel-query-builder