diff options
author | alecpl <alec@alec.pl> | 2010-06-02 10:23:06 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2010-06-02 10:23:06 +0000 |
commit | 1126fc6127a0dbeeb053da55412414861109f94a (patch) | |
tree | 164ecedcb2e49a6549c6ffae5b9a17a3c27a09f2 /program/include | |
parent | 7d43f895325dd6ddd3e1962584206c67b2bd8e6a (diff) |
- Performance improvement in add_to_group()
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcube_contacts.php | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php index 5553a23ad..698378ad7 100644 --- a/program/include/rcube_contacts.php +++ b/program/include/rcube_contacts.php @@ -564,28 +564,32 @@ class rcube_contacts extends rcube_addressbook $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=?", + $this->db->query( + "INSERT INTO ".get_table_name($this->db_groupmembers). + " (contactgroup_id, contact_id, created)". + " VALUES (?, ?, ".$this->db->now().")", $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)". - " VALUES (?, ?, ".$this->db->now().")", - $group_id, - $contact_id - ); - - if (!$this->db->db_error) - $added++; - } + if (!$this->db->db_error) + $added++; } return $added; |