Skip to content

Commit 1c13fcc

Browse files
committed
Fixed reporting queries and aggregation
1 parent 530f74c commit 1c13fcc

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

lib/Db/ReportItemMapper.php

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,28 +61,46 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
6161

6262
}
6363
if(($groupOn1 != 'name') && ($groupOn2 != 'name')){
64-
$selectFields[] = 'MIN(wi.name) as name';
64+
if ($this->dbengine != 'MYSQL') {
65+
$selectFields[] = '\'*\' as name';
66+
} else {
67+
$selectFields[] = 'CASE WHEN CHAR_LENGTH(group_concat(distinct wi.name)) > 40 THEN CONCAT(SUBSTRING(group_concat(distinct wi.name), 1, 40), "...") ELSE group_concat(distinct wi.name) END as name';
68+
}
69+
//$selectFields[] = 'group_concat(distinct wi.name) as name';
6570
} else {
6671
$selectFields[] = 'wi.name as name';
6772
}
6873
if(($groupOn1 != 'project') && ($groupOn2 != 'project')){
69-
$selectFields[] = 'MIN(wi.project_id) as "projectId"';
70-
$selectFields[] = 'MIN(p.name) as project';
74+
$selectFields[] = '\'*\' as "projectId"';
75+
if ($this->dbengine != 'MYSQL') {
76+
$selectFields[] = 'string_agg(distinct p.name, \',\') as project';
77+
} else {
78+
$selectFields[] = 'group_concat(distinct p.name) as project';
79+
}
7180
} else {
72-
$selectFields[] = 'MIN(wi.project_id) as "projectId"';
81+
$selectFields[] = '\'*\' as "projectId"';
7382
$selectFields[] = 'p.name as project';
7483
}
7584

7685
if(($groupOn1 != 'client') && ($groupOn2 != 'client')){
77-
$selectFields[] = 'MIN(c.id) as "clientId"';
78-
$selectFields[] = 'MIN(c.name) as client';
86+
$selectFields[] = '\'*\' as "clientId"';
87+
if ($this->dbengine != 'MYSQL') {
88+
$selectFields[] = 'string_agg(distinct c.name, \',\') as client';
89+
} else {
90+
$selectFields[] = 'group_concat(distinct c.name) as client';
91+
}
92+
7993
} else {
80-
$selectFields[] = 'MIN(c.id) as "clientId"';
94+
$selectFields[] = '\'*\' as "clientId"';
8195
$selectFields[] = 'c.name as client';
8296
}
8397

8498
if(($groupOn1 != 'userUid') && ($groupOn2 != 'userUid')){
85-
$selectFields[] = 'MIN(user_uid) as "userUid"';
99+
if ($this->dbengine != 'MYSQL') {
100+
$selectFields[] = 'string_agg(distinct user_uid, \',\') as "userUid"';
101+
} else {
102+
$selectFields[] = 'group_concat(distinct user_uid) as "userUid"';
103+
}
86104

87105
} else {
88106
$selectFields[] = 'user_uid as "userUid"';
@@ -124,10 +142,10 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
124142
$qm[] = '?';
125143
$params[] = $f;
126144
if ($f == null) {
127-
$append = ' or p.client_id is null ';
145+
$append = ' or c.id is null ';
128146
}
129147
}
130-
$filters[] = '(p.client_id in ('.implode(",",$qm).')'.$append.')';
148+
$filters[] = '(c.id in ('.implode(",",$qm).')'.$append.')';
131149
}
132150
if ( (!empty($user)) && (!$admin) ){
133151
$filters[] = "(user_uid = ?)";
@@ -177,6 +195,8 @@ public function report($user, $from, $to, $filterProjectId, $filterClientId, $fi
177195
$limit = 10000;
178196
}
179197
$sql = 'SELECT '.$selectItems.' where '.implode(" and ",$filters).' '.$group. ' order by time desc';
198+
//var_dump($sql);
199+
//var_dump($params);
180200
return $this->findEntities($sql, $params, $limit, $start);
181201
}
182202

0 commit comments

Comments
 (0)