Attempt to speed up queries in manageaccount activity 2, a=chris

Chris Pollett [2020-06-23 23:Jun:rd]
Attempt to speed up queries in manageaccount activity 2, a=chris
Filename
src/controllers/components/AccountaccessComponent.php
src/models/GroupModel.php
diff --git a/src/controllers/components/AccountaccessComponent.php b/src/controllers/components/AccountaccessComponent.php
index fe58f951a..02d5ea56c 100644
--- a/src/controllers/components/AccountaccessComponent.php
+++ b/src/controllers/components/AccountaccessComponent.php
@@ -184,21 +184,16 @@ class AccountaccessComponent extends Component
                 continue;
             }
             $data['GROUPS'][$i] = $tmp_group;
-            $search_array = [
-                ["group_id", "=", $group_id, ""],
-                ["pub_date", "", "", "DESC"]
-                ];
-            $item = $group_model->getGroupItems(0, 1,
-                $search_array, $user_id);
+            $item = $group_model->getMostRecentGroupPost($group_id);
             $data['GROUPS'][$i]['NUM_POSTS'] =
                 $group_model->getGroupPostCount($group_id);
             $data['GROUPS'][$i]['NUM_THREADS'] =
                 $group_model->getGroupThreadCount($group_id);
             $data['GROUPS'][$i]['NUM_PAGES'] =
                 $group_model->getGroupPageCount($group_id);
-            if (isset($item[0]['TITLE'])) {
-                $data['GROUPS'][$i]["ITEM_TITLE"] = $item[0]['TITLE'];
-                $data['GROUPS'][$i]["THREAD_ID"] = $item[0]['PARENT_ID'];
+            if (isset($item['TITLE'])) {
+                $data['GROUPS'][$i]["ITEM_TITLE"] = $item['TITLE'];
+                $data['GROUPS'][$i]["THREAD_ID"] = $item['PARENT_ID'];
             } else {
                 $data['GROUPS'][$i]["ITEM_TITLE"] =
                     tl('accountaccess_component_no_posts_yet');
diff --git a/src/models/GroupModel.php b/src/models/GroupModel.php
index ae3d2f0f6..1b7e5abd6 100644
--- a/src/models/GroupModel.php
+++ b/src/models/GroupModel.php
@@ -1106,13 +1106,47 @@ class GroupModel extends Model implements MediaConstants
         $row = $db->fetchArray($result);
         return $row['NUM'] ?? false;
     }
+    /**
+     *
+     */
+    public function getMostRecentGroupPost($group_id)
+    {
+        $db = $this->db;
+        $sql = "SELECT MAX(GI.PUBDATE) AS PUBDATE
+            FROM GROUP_ITEM GI
+            WHERE GI.GROUP_ID = ?";
+        $result = $db->execute($sql, [$group_id]);
+        if (empty($result)) {
+            return "";
+        }
+        $row = $db->fetchArray($result);
+        if (empty($row)) {
+            return "";
+        }
+        $sql = "SELECT DISTINCT GI.ID AS ID, GI.PARENT_ID AS PARENT_ID,
+            GI.GROUP_ID AS GROUP_ID, GI.TITLE AS TITLE,
+            GI.DESCRIPTION AS DESCRIPTION, GI.PUBDATE AS PUBDATE,
+            GI.EDIT_DATE AS EDIT_DATE, G.OWNER_ID AS OWNER_ID,
+            G.MEMBER_ACCESS AS MEMBER_ACCESS, G.GROUP_NAME AS GROUP_NAME,
+            P.USER_NAME AS USER_NAME, P.USER_ID AS USER_ID, GI.TYPE AS TYPE,
+            GI.UPS AS UPS, GI.DOWNS AS DOWNS, G.VOTE_ACCESS AS VOTE_ACCESS
+            FROM GROUP_ITEM GI, GROUPS G, USERS P
+            WHERE GI.GROUP_ID = ? AND GI.GROUP_ID=G.GROUP_ID AND
+            GI.USER_ID = P.USER_ID AND GI.PUBDATE = ? LIMIT 0 , 1";
+        $result = $db->execute($sql, [$group_id, $row['PUBDATE']]);
+        if (empty($result)) {
+            return "";
+        }
+        return $db->fetchArray($result);
+    }
     /**
      *
      */
     public function getGroupThreadCount($group_id)
     {
         $db = $this->db;
-        $sql = "SELECT COUNT(DISTINCT GI.PARENT_ID) AS NUM FROM GROUP_ITEM GI
+        $sql = "SELECT COUNT(DISTINCT GI.PARENT_ID) AS NUM
+            FROM GROUP_ITEM GI
             WHERE GI.GROUP_ID = ?";
         $result = $db->execute($sql, [$group_id]);
         if (!$result) {
ViewGit