list($select, $from, $where, $having) = $this->query($count, $sortByChar, $groupContacts, $onlyDeleted);
if (!empty($groupByCols)) {
- $select = self::appendAnyValueToSelect($this->_select, $groupByCols, 'GROUP_CONCAT');
+ // It doesn't matter to include columns in SELECT clause, which are present in GROUP BY when we just want the contact IDs
+ if (!$groupContacts) {
+ $select = self::appendAnyValueToSelect($this->_select, $groupByCols, 'GROUP_CONCAT');
+ }
$groupBy = " GROUP BY " . implode(', ', $groupByCols);
if (!empty($order)) {
// retrieve order by columns from ORDER BY clause
$sql = $this->_query->searchQuery($start, $end, $sort, FALSE, $this->_query->_includeContactIds,
FALSE, TRUE, TRUE);
}
- $replaceSQL = $this->_query->getSelect();
// CRM-9096
// due to limitations in our search query writer, the above query does not work
$insertSQL = "
INSERT INTO civicrm_prevnext_cache ( entity_table, entity_id1, entity_id2, cacheKey, data )
-SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.display_name
+SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.sort_name
";
- $sql = str_replace($replaceSQL, $insertSQL, $sql);
+ $sql = str_replace(array("SELECT contact_a.id as contact_id", "SELECT contact_a.id as id"), $insertSQL, $sql);
try {
CRM_Core_DAO::executeQuery($sql);
}