From 4a890e777c1d8e62a236da559e1e14107af679d8 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 23 Jul 2025 10:37:33 +0300 Subject: [PATCH] campaign stats sql fix --- .../FieldProcessing/Campaign/StatsLoader.php | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/application/Espo/Modules/Crm/Classes/FieldProcessing/Campaign/StatsLoader.php b/application/Espo/Modules/Crm/Classes/FieldProcessing/Campaign/StatsLoader.php index 80023788cd..4cb4a62dc2 100644 --- a/application/Espo/Modules/Crm/Classes/FieldProcessing/Campaign/StatsLoader.php +++ b/application/Espo/Modules/Crm/Classes/FieldProcessing/Campaign/StatsLoader.php @@ -41,6 +41,9 @@ use Espo\Core\FieldProcessing\Loader; use Espo\Core\FieldProcessing\Loader\Params; use Espo\Core\ORM\EntityManager; +use Espo\ORM\Query\Part\Condition; +use Espo\ORM\Query\Part\Expression; +use Espo\ORM\Query\Part\Join; use Espo\ORM\Query\SelectBuilder; use PDO; @@ -103,22 +106,32 @@ class StatsLoader implements Loader $clickedCount = $this->entityManager ->getRDBRepository(CampaignLogRecord::ENTITY_TYPE) - ->where([ - 'campaignId' => $entity->getId(), - 'action' => CampaignLogRecord::ACTION_CLICKED, - 'isTest' => false, - 'id=s' => SelectBuilder::create() - ->select('MIN:id') + ->clone( + SelectBuilder::create() ->from(CampaignLogRecord::ENTITY_TYPE) + ->leftJoin( + Join::createWithTableTarget(CampaignLogRecord::ENTITY_TYPE, 'b') + ->withConditions( + Condition::and( + Condition::equal( + Expression::column('queueItemId'), + Expression::column('b.queueItemId'), + ), + Condition::greater( + Expression::column('b.id'), + Expression::column('id'), + ), + ) + ) + ) ->where([ + 'campaignId' => $entity->getId(), 'action' => CampaignLogRecord::ACTION_CLICKED, 'isTest' => false, - 'campaignId' => $entity->getId(), + 'b.id' => null, ]) - ->group('queueItemId') ->build() - ->getRaw(), - ]) + ) ->count(); $entity->set('clickedCount', $clickedCount);