diff --git a/include/class.orm.php b/include/class.orm.php index 8393aeabb9a9407da952cb193bd73e51e9f58435..b95735e0dca6553dfdabe9f68f0faa23153590a6 100644 --- a/include/class.orm.php +++ b/include/class.orm.php @@ -2629,10 +2629,7 @@ class SqlCompiler { foreach ($queryset->extra['tables'] as $S) { $join = ' JOIN '; // Left joins require an ON () clause - if ($lastparen = strrpos($S, '(')) { - if (preg_match('/\bon\b/i', substr($S, $lastparen - 4, 4))) - $join = ' LEFT' . $join; - } + // TODO: Have a way to indicate a LEFT JOIN $sql .= $join.$S; } } @@ -3087,7 +3084,7 @@ class MySqlCompiler extends SqlCompiler { } } // If no group by has been set yet, use the root model pk - if (!$group_by && !$queryset->aggregated && !$queryset->distinct) { + if (!$group_by && !$queryset->aggregated && !$queryset->distinct && $need_group_by) { foreach ($meta['pk'] as $pk) $group_by[] = $rootAlias .'.'. $pk; } diff --git a/include/class.search.php b/include/class.search.php index db7ef05c6580a800880bffd46543225f36f7f323..f5034d1f39b5d593b2acc2d837c1d4f04cfdbe4a 100644 --- a/include/class.search.php +++ b/include/class.search.php @@ -384,9 +384,11 @@ class MysqlSearchBackend extends SearchBackend { $criteria->extra(array( 'tables' => array( str_replace(array(':', '{}'), array(TABLE_PREFIX, $search), - "(SELECT COALESCE(Z3.`object_id`, Z5.`ticket_id`, Z8.`ticket_id`) as `ticket_id`, SUM({}) AS `relevance` FROM `:_search` Z1 LEFT JOIN `:thread_entry` Z2 ON (Z1.`object_type` = 'H' AND Z1.`object_id` = Z2.`id`) LEFT JOIN `:thread` Z3 ON (Z2.`thread_id` = Z3.`id` AND Z3.`object_type` = 'T') LEFT JOIN `:ticket` Z5 ON (Z1.`object_type` = 'T' AND Z1.`object_id` = Z5.`ticket_id`) LEFT JOIN `:user` Z6 ON (Z6.`id` = Z1.`object_id` and Z1.`object_type` = 'U') LEFT JOIN `:organization` Z7 ON (Z7.`id` = Z1.`object_id` AND Z7.`id` = Z6.`org_id` AND Z1.`object_type` = 'O') LEFT JOIN :ticket Z8 ON (Z8.`user_id` = Z6.`id`) WHERE {} GROUP BY `ticket_id`) Z1"), - ) + "(SELECT COALESCE(Z3.`object_id`, Z5.`ticket_id`, Z8.`ticket_id`) as `ticket_id`, Z1.relevance FROM (SELECT Z1.`object_id`, Z1.`object_type`, {} AS `relevance` FROM `:_search` Z1 WHERE {} > 0.3 ORDER BY relevance DESC) Z1 LEFT JOIN `:thread_entry` Z2 ON (Z1.`object_type` = 'H' AND Z1.`object_id` = Z2.`id`) LEFT JOIN `:thread` Z3 ON (Z2.`thread_id` = Z3.`id` AND Z3.`object_type` = 'T') LEFT JOIN `:ticket` Z5 ON (Z1.`object_type` = 'T' AND Z1.`object_id` = Z5.`ticket_id`) LEFT JOIN `:user` Z6 ON (Z6.`id` = Z1.`object_id` and Z1.`object_type` = 'U') LEFT JOIN `:organization` Z7 ON (Z7.`id` = Z1.`object_id` AND Z7.`id` = Z6.`org_id` AND Z1.`object_type` = 'O') LEFT JOIN `:ticket` Z8 ON (Z8.`user_id` = Z6.`id`)) Z1"), + ), )); + $criteria->extra(array('order_by' => array(array(new SqlCode('Z1.relevance', 'DESC'))))); + $criteria->filter(array('ticket_id'=>new SqlCode('Z1.`ticket_id`'))); break; diff --git a/include/staff/templates/queue-tickets.tmpl.php b/include/staff/templates/queue-tickets.tmpl.php index 50a81b024b8668226d2421b479eb0e9d500cbeca..fe82ff9a21460eda9090a000f4fda147a99bc323 100644 --- a/include/staff/templates/queue-tickets.tmpl.php +++ b/include/staff/templates/queue-tickets.tmpl.php @@ -82,7 +82,7 @@ $tickets = $pageNav->paginateSimple($tickets); // criteria, sort, limit, and offset from the outer query. $criteria = clone $tickets; $criteria->annotations = $criteria->related = $criteria->aggregated = []; -$tickets->constraints = $tickets->extra['tables'] = []; +$tickets->constraints = $tickets->extra = []; $tickets = $tickets->filter(['ticket_id__in' => $criteria->values_flat('ticket_id')]) ->limit(false)->offset(false)->order_by(false); # Index hint should be used on the $criteria query only