fluentPDO 中的子查询

Subquery in fluentPDO

我正在尝试"translate"将此查询转换为流畅的 PDO 语句,但我找不到使用子查询的方法

SELECT plan.*, COUNT(DISTINCT click.id) AS clicks, COUNT(DISTINCT impression.id) as impressions, IFNULL(A.earnings, 0) AS earnings FROM plan
LEFT JOIN click ON click.plan_id = plan.id
LEFT JOIN impression ON impression.plan_id = plan.id
LEFT JOIN (
    SELECT plan_id AS earnings_id, SUM(signup.earning) as earnings FROM signup
) A ON A.earnings_id = plan.id
GROUP BY plan.id

有什么帮助吗?

我不知道有什么比将原始 SQL 子查询放入 leftJoin 方法更好的方法了:

$fluent->from('plan')
->select('COUNT(DISTINCT click.id) AS clicks, COUNT(DISTINCT impression.id) as impressions, IFNULL(A.earnings, 0) AS earnings')
->leftJoin('click ON click.plan_id = plan.id')
->leftJoin('impression ON impression.plan_id = plan.id')
->leftJoin('(SELECT plan_id AS earnings_id, SUM(signup.earning) as earnings FROM signup) A ON A.earnings_id = plan.id')
->groupBy('plan.id');

我发现 SitePoints's FluentPDO guide 很有用,但他们没有提到子查询。他们还建议您不需要显式地左联接点击计划和印象计划,但在实践中,我永远不知道 FluentPDO 将以哪种方式推断两个表之间的关系。