Browse Source

Vastly optimized reporting query by splitting on OR to avoid complex join - refs BT#7112

Yannick Warnier 11 years ago
parent
commit
0430e130a4
1 changed files with 22 additions and 2 deletions
  1. 22 2
      main/inc/lib/usermanager.lib.php

+ 22 - 2
main/inc/lib/usermanager.lib.php

@@ -2256,20 +2256,40 @@ class UserManager
         }
 
         // Get the list of sessions where the user is subscribed
+        // This is divided into two different queries
+        $sessions = array();
         $sessions_sql = "SELECT DISTINCT id, name, date_start, date_end
                         FROM $tbl_session_user, $tbl_session
                         WHERE (
                             id_session = id AND
                             id_user = $user_id AND
                             relation_type <> ".SESSION_RELATION_TYPE_RRHH."
-                        ) OR (
+                        )
+                        $coachCourseConditions
+                        ORDER BY date_start, date_end, name";
+
+        $result = Database::query($sessions_sql);
+        if (Database::num_rows($result)>0) {
+            while ($row = Database::fetch_assoc($result)) {
+                $sessions[$row['id']] = $row;
+            }
+        }
+        $sessions_sql = "SELECT DISTINCT id, name, date_start, date_end
+                        FROM $tbl_session_user, $tbl_session
+                        WHERE (
                             id_coach = $user_id
                         )
                         $coachCourseConditions
                         ORDER BY date_start, date_end, name";
 
         $result = Database::query($sessions_sql);
-        $sessions = Database::store_result($result, 'ASSOC');
+        if (Database::num_rows($result)>0) {
+            while ($row = Database::fetch_assoc($result)) {
+                if (empty($sessions[$row['id']])) {
+                    $sessions[$row['id']] = $row;
+                }
+            }
+        }
 
         if (api_is_allowed_to_create_course()) {