From 70808b7ef9d27b0e484631e66d0b3228ddf702f7 Mon Sep 17 00:00:00 2001
From: Dan Poltawski <dan.poltawski@lancaster.ac.uk>
Date: Thu, 14 May 2009 10:47:31 +0100
Subject: [PATCH] When exporting from response_multiple quesitons in CSV format

The 1 db query per response_multiple cost a lot.

Before: 13250
After:  7017
---
 locallib.php |   30 +++++++++++++-----------------
 1 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/locallib.php b/locallib.php
index c1ce49e..3d71e02 100755
--- a/locallib.php
+++ b/locallib.php
@@ -1587,8 +1587,11 @@ class questionnaire {
                     } else {
                         $qids2 = 'question_id= ' . $qids2;
                     }
-                    $sql = 'SELECT * FROM '.$CFG->prefix.'questionnaire_quest_choice WHERE '.$qids2.
-                        'ORDER BY id';
+                    $sql = "SELECT c.id, c.question_id, c.content, q.name, q.type_id as type, q.position as pos
+                            FROM {$CFG->prefix}questionnaire_quest_choice c
+                            JOIN {$CFG->prefix}questionnaire_question q ON q.id = c.question_id
+                            WHERE {$qids2} ORDER BY id";
+
                     if ($records2 = get_records_sql($sql)) {
                         foreach ($records2 as $qid => $row2) {
                             $selected = '0';
@@ -1609,14 +1612,7 @@ class questionnaire {
                                     $c2 = $contents->title;
                                 }
                             }
-                            $sql = 'SELECT a.name as name, a.type_id as q_type, a.position as pos ' .
-                                    'FROM '.$CFG->prefix.'questionnaire_question a WHERE id = '.$qid2;
-                            if ($currentquestion = get_records_sql($sql)) {
-                                foreach ($currentquestion as $question) {
-                                    $name1 = $question->name;
-                                    $type1 = $question->q_type;
-                                }
-                            }
+
                             $newrow = array();
                             foreach ($records as $qid => $row1) {
                                 $qid1 = $row1->qid;
@@ -1628,17 +1624,17 @@ class questionnaire {
                             }
                             if ($otherend) {
                                 $newrow2 = array();
-                                $newrow2[] = $question->pos;
-                                $newrow2[] = $type1;
-                                $newrow2[] = $name1;
+                                $newrow2[] = $row2->pos;
+                                $newrow2[] = $row2->type;
+                                $newrow2[] = $row2->name;
                                 $newrow2[] = '['.get_string('other','questionnaire').']';
                                 $newrow2[] = $selected;
                                 $tmp2 = $qid2.'_other';
                                 $values["$tmp2"]=$newrow2;
                             }
-                            $newrow[] = $question->pos;
-                            $newrow[] = $type1;
-                            $newrow[] = $name1;
+                            $newrow[] = $row2->pos;
+                            $newrow[] = $row2->type;
+                            $newrow[] = $row2->name;
                             $newrow[] = $c2;
                             $newrow[] = $selected;
                             $tmp = $qid2.'_'.$cid2;
@@ -2985,4 +2981,4 @@ function questionnaire_response_key_cmp($l, $r) {
          }
         return $contents;
     }
-?>
\ No newline at end of file
+?>
-- 
1.6.2.4

