aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorDavid M <davidmj@users.sourceforge.net>2007-03-02 19:46:24 +0000
committerDavid M <davidmj@users.sourceforge.net>2007-03-02 19:46:24 +0000
commit5cdf74ea0c8af4f9437824cb5d396d60004bf056 (patch)
treec33001e34663ac6b0234a17054b51baa9dd75c89 /phpBB
parent1e578bf79a1703d8d43f12d6438ab34627489684 (diff)
downloadforums-5cdf74ea0c8af4f9437824cb5d396d60004bf056.tar
forums-5cdf74ea0c8af4f9437824cb5d396d60004bf056.tar.gz
forums-5cdf74ea0c8af4f9437824cb5d396d60004bf056.tar.bz2
forums-5cdf74ea0c8af4f9437824cb5d396d60004bf056.tar.xz
forums-5cdf74ea0c8af4f9437824cb5d396d60004bf056.zip
- fixes a performance issue, uses a few more arrays than I wanted but this was out of keeping the "real" data structure unchanged (I didn't want to introduce more bugs :P)
git-svn-id: file:///svn/phpbb/trunk@7108 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/includes/acp/acp_groups.php54
1 files changed, 45 insertions, 9 deletions
diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php
index 67c9d4d338..c35d2b5700 100644
--- a/phpBB/includes/acp/acp_groups.php
+++ b/phpBB/includes/acp/acp_groups.php
@@ -692,33 +692,69 @@ class acp_groups
'S_GROUP_ADD' => ($auth->acl_get('a_groupadd')) ? true : false)
);
- $sql = 'SELECT g.group_id, g.group_name, g.group_type, COUNT(ug.user_id) AS total_members
+ // Get us all the groups
+ $sql = 'SELECT g.group_id, g.group_name, g.group_type
FROM ' . GROUPS_TABLE . ' g
- LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON (g.group_id = ug.group_id)
- GROUP BY g.group_id, g.group_name, g.group_type
ORDER BY g.group_type ASC, g.group_name';
$result = $db->sql_query($sql);
+ $iterate = $lookup = $cached_group_data = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
+ // used to determine what type a group is
+ $lookup[$row['group_id']] = $type;
+ // used for easy access to the data within a group
+ $cached_group_data[$type][$row['group_id']] = $row;
+ // this array holds the properly sorted information
+ $iterate[$type][] = $row['group_id'];
+ }
+ $db->sql_freeresult($result);
+
+ // How many people are in which group?
+ $sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
+ FROM ' . USER_GROUP_TABLE . ' ug
+ WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
+ GROUP BY ug.group_id';
+ $result = $db->sql_query($sql);
+
$special = $normal = 0;
$group_ary = array();
while ($row = $db->sql_fetchrow($result))
{
- $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
+ $type = $lookup[$row['group_id']];
+ $data = &$cached_group_data[$type][$row['group_id']];
$group_ary[$type][$$type]['group_id'] = $row['group_id'];
- $group_ary[$type][$$type]['group_name'] = $row['group_name'];
- $group_ary[$type][$$type]['group_type'] = $row['group_type'];
+ $group_ary[$type][$$type]['group_name'] = $data['group_name'];
+ $group_ary[$type][$$type]['group_type'] = $data['group_type'];
$group_ary[$type][$$type]['total_members'] = $row['total_members'];
+ unset($cached_group_data[$type][$row['group_id']], $lookup[$row['group_id']]);
$$type++;
}
$db->sql_freeresult($result);
+ // SQL query ignores empty groups, lets fill in the details ;)
+ foreach ($lookup as $group_id => $type)
+ {
+ $data = &$cached_group_data[$type][$group_id];
+
+ $group_ary[$type][$$type]['group_id'] = (string) $group_id;
+ $group_ary[$type][$$type]['group_name'] = $data['group_name'];
+ $group_ary[$type][$$type]['group_type'] = $data['group_type'];
+ $group_ary[$type][$$type]['total_members'] = '0';
+
+ $$type++;
+ }
+
+ unset($cached_group_data);
+
ksort($group_ary);
$special_toggle = false;
- foreach ($group_ary as $type => $row_ary)
+ foreach ($iterate as $type => $row_ary)
{
if ($type == 'special')
{
@@ -727,9 +763,9 @@ class acp_groups
);
}
- foreach ($row_ary as $row)
+ foreach ($row_ary as $key => $group_id)
{
- $group_id = $row['group_id'];
+ $row = &$group_ary[$type][$key];
$group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
$template->assign_block_vars('groups', array(