From f7530969d5cb9dc62b48af042773274dccf3f9e0 Mon Sep 17 00:00:00 2001 From: Mark Johnson Date: Fri, 29 Nov 2024 13:14:46 +0000 Subject: [PATCH] MDL-76155 qbank_comment: Move comment count queries to a JOIN --- .../comment/classes/comment_count_column.php | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/question/bank/comment/classes/comment_count_column.php b/question/bank/comment/classes/comment_count_column.php index 4c449d85b0440..52f7f0913d854 100644 --- a/question/bank/comment/classes/comment_count_column.php +++ b/question/bank/comment/classes/comment_count_column.php @@ -83,15 +83,7 @@ public function get_title(): string { * @param string $rowclasses Classes that can be added. */ protected function display_content($question, $rowclasses): void { - global $DB; $syscontext = \context_system::instance(); - $args = [ - 'component' => 'qbank_comment', - 'commentarea' => 'question', - 'itemid' => $question->id, - 'contextid' => $syscontext->id, - ]; - $commentcount = $DB->count_records('comments', $args); $attributes = []; if (question_has_capability_on($question, 'comment')) { $target = 'questioncommentpreview_' . $question->id; @@ -103,7 +95,27 @@ protected function display_content($question, $rowclasses): void { 'data-contextid' => $syscontext->id, ]; } - echo \html_writer::tag('a', $commentcount, $attributes); + echo \html_writer::tag('a', $question->commentcount ?? 0, $attributes); + } + + public function get_extra_joins(): array { + $syscontext = \context_system::instance(); + $subquery = " + SELECT COUNT('x') AS commentcount, itemid AS questionid + FROM {comments} c + WHERE c.component = 'qbank_comment' + AND commentarea = 'question' + AND contextid = {$syscontext->id} + GROUP BY c.itemid + "; + + return [ + 'comments' => "LEFT JOIN ({$subquery}) comments ON comments.questionid = q.id" + ]; + } + + public function get_required_fields(): array { + return ['comments.commentcount AS commentcount']; } public function get_extra_classes(): array {