alecpl
2010-06-02 1126fc6127a0dbeeb053da55412414861109f94a
- Performance improvement in add_to_group()


1 files modified
24 ■■■■■ changed files
program/include/rcube_contacts.php 24 ●●●●● patch | view | raw | blame | history
program/include/rcube_contacts.php
@@ -564,17 +564,22 @@
            $ids = explode(',', $ids);
        $added = 0;
        $exists = array();
        // get existing assignments ...
        $sql_result = $this->db->query(
            "SELECT contact_id FROM ".get_table_name($this->db_groupmembers).
            " WHERE contactgroup_id=?".
                " AND contact_id IN (".$this->db->array2list($ids, 'integer').")",
            $group_id
        );
        while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
            $exists[] = $sql_arr['contact_id'];
        }
        // ... and remove them from the list
        $ids = array_diff($ids, $exists);
        foreach ($ids as $contact_id) {
            $sql_result = $this->db->query(
                "SELECT 1 FROM ".get_table_name($this->db_groupmembers).
                " WHERE contactgroup_id=?".
                    " AND contact_id=?",
                $group_id,
                $contact_id
            );
            if (!$this->db->num_rows($sql_result)) {
                $this->db->query(
                    "INSERT INTO ".get_table_name($this->db_groupmembers).
                    " (contactgroup_id, contact_id, created)".
@@ -585,7 +590,6 @@
                if (!$this->db->db_error)
                    $added++;
            }
        }
        return $added;