加入取决于第二个非相关联接,原则2

时间:2015-09-14 13:34:52

标签: php mysql doctrine-orm

我在查询构建器中工作,目的是返回经销商付款的排名。经销商通过非外键列(affiliateCode)与其客户关联,因此我需要将此连接与依赖于此非键连接的实体列表相关联。

结果我最终这样结果但它不起作用。虽然没有抛出任何错误。

$queryBuilder = $this->getEntityManager()->createQueryBuilder();
    $queryBuilder->select('SUM(pay.value) as total_points, cli.id as client_id')
        ->from('Application\Model\Payment', 'pay')
        ->innerJoin('pay.subscription', 'sub')
        ->innerJoin('sub.client', 'representative')
        ->innerJoin(
            'representative.userCollection',
            'seller',
            'WITH',
            'seller.affiliateCode = cli.affiliateCode'
        )
        ->innerJoin('seller.clientCollection', 'cli')
        ->where(
            '
                pay.status = :donePaymentStatus
                AND representative.affiliateCode IS NOT NULL
            '
        )
        ->groupBY('cli.id')
        ->orderBY('total_points', 'DESC');

    $queryBuilder->setParameters([
        'donePaymentStatus' => PaymentStatus::DONE,
    ]);

如果我想通过连接尝试做什么,你能否提出另一种选择。也许是嵌套查询。

1 个答案:

答案 0 :(得分:0)

您没有收到错误的原因是您的语法很好,但您的逻辑有问题。 INNER JOIN是您可以执行的最独特的连接 - 它将仅返回符合所有条件的记录。你可能会有更少的独家联接(LEFT或RIGHT JOIN)更幸运。

Venn Diagrams帮助:

http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/