optmized query

This commit is contained in:
CiviWare Solutions 2019-01-10 22:33:22 +00:00
parent 425d0431c5
commit 56881b50a0
1 changed files with 29 additions and 12 deletions

View File

@ -61,19 +61,37 @@ class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
*/
public static function getConstituentSql($contactIds) {
return "
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id
SELECT contact_id, MAX(og_contact_id) AS og_contact_id FROM (
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id
FROM civicrm_contact contact_a
INNER JOIN civicrm_relationship cr
ON (cr.contact_id_a = contact_a.id OR cr.contact_id_b = contact_a.id)
AND contact_a.is_deleted = 0
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
AND cr.is_active = 1
INNER JOIN civicrm_contact cc
ON (cr.contact_id_a = cc.id OR cr.contact_id_b = cc.id)
AND contact_a.id <> cc.id
AND cc.id IN (" . implode(',', $contactIds) . ")
AND cc.do_not_trade = 1
INNER JOIN civicrm_relationship cr
ON (cr.contact_id_a = contact_a.id)
AND contact_a.is_deleted = 0
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
AND cr.is_active = 1
INNER JOIN civicrm_contact cc
ON (cr.contact_id_b = cc.id)
AND contact_a.id <> cc.id
AND cc.id IN (" . implode(',', $contactIds) . ")
AND cc.do_not_trade = 1
GROUP BY cc.id
UNION
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id
FROM civicrm_contact contact_a
INNER JOIN civicrm_relationship cr
ON (cr.contact_id_b = contact_a.id)
AND contact_a.is_deleted = 0
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
AND cr.is_active = 1
INNER JOIN civicrm_contact cc
ON (cr.contact_id_a = cc.id)
AND contact_a.id <> cc.id
AND cc.id IN (" . implode(',', $contactIds) . ")
AND cc.do_not_trade = 1
GROUP BY cc.id
) AS temp GROUP BY contact_id
";
}
@ -147,7 +165,6 @@ class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
public static function updateSearchRows($rows, $headers) {
$contactIds = array_keys($rows);
$sql = self::getConstituentSql($contactIds);
$result = CRM_Core_DAO::executeQuery($sql);
$relContactIds = [];