Use subquery instead of JOIN + COUNT (#1483)

This commit is contained in:
Thomas Bruederli 2012-12-21 17:52:07 +01:00
parent 8c5edcf0e9
commit df3e58bdb9

View file

@ -696,8 +696,9 @@ class database_driver extends calendar_driver
} }
$result = $this->rc->db->query(sprintf( $result = $this->rc->db->query(sprintf(
"SELECT e.*, COUNT(a.attachment_id) AS _attachments FROM " . $this->db_events . " AS e "SELECT e.*, (SELECT COUNT(attachment_id) FROM " . $this->db_attachments . "
LEFT JOIN " . $this->db_attachments . " AS a ON (a.event_id = e.event_id OR a.event_id = e.recurrence_id) WHERE event_id = e.event_id OR event_id = e.recurrence_id) AS _attachments
FROM " . $this->db_events . " AS e
WHERE e.calendar_id IN (%s) WHERE e.calendar_id IN (%s)
AND e.$col=?", AND e.$col=?",
$cals $cals
@ -738,8 +739,9 @@ class database_driver extends calendar_driver
$events = array(); $events = array();
if (!empty($calendar_ids)) { if (!empty($calendar_ids)) {
$result = $this->rc->db->query(sprintf( $result = $this->rc->db->query(sprintf(
"SELECT e.*, COUNT(a.attachment_id) AS _attachments FROM " . $this->db_events . " AS e "SELECT e.*, (SELECT COUNT(attachment_id) FROM " . $this->db_attachments . "
LEFT JOIN " . $this->db_attachments . " AS a ON (a.event_id = e.event_id OR a.event_id = e.recurrence_id) WHERE event_id = e.event_id OR event_id = e.recurrence_id) AS _attachments
FROM " . $this->db_events . " AS e
WHERE e.calendar_id IN (%s) WHERE e.calendar_id IN (%s)
AND e.start <= %s AND e.end >= %s AND e.start <= %s AND e.end >= %s
%s %s