aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid M <davidmj@users.sourceforge.net>2007-02-28 22:14:23 +0000
committerDavid M <davidmj@users.sourceforge.net>2007-02-28 22:14:23 +0000
commit4e423d9907d018c827db27f1d45d6aab1e390445 (patch)
tree456809047a70663af95f14a3c4f68e9726438719
parentd591e0bf44e6a37e055fffb9a6e41173bb8f5da8 (diff)
downloadforums-4e423d9907d018c827db27f1d45d6aab1e390445.tar
forums-4e423d9907d018c827db27f1d45d6aab1e390445.tar.gz
forums-4e423d9907d018c827db27f1d45d6aab1e390445.tar.bz2
forums-4e423d9907d018c827db27f1d45d6aab1e390445.tar.xz
forums-4e423d9907d018c827db27f1d45d6aab1e390445.zip
- pretty sweet speed increase
git-svn-id: file:///svn/phpbb/trunk@7097 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r--phpBB/memberlist.php145
1 files changed, 83 insertions, 62 deletions
diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php
index 425a710e65..abc88fa1df 100644
--- a/phpBB/memberlist.php
+++ b/phpBB/memberlist.php
@@ -871,7 +871,7 @@ switch ($mode)
// Additional sorting options for user search ... if search is enabled, if not
// then only admins can make use of this (for ACP functionality)
- $sql_select = $sql_from = $sql_where = $order_by = '';
+ $sql_select = $sql_where_data = $sql_from = $sql_where = $order_by = '';
$form = request_var('form', '');
$field = request_var('field', '');
@@ -1112,6 +1112,7 @@ switch ($mode)
$order_by = 'ug.group_leader DESC, ';
$sql_where .= " AND ug.user_pending = 0 AND u.user_id = ug.user_id AND ug.group_id = $group_id";
+ $sql_where_data = ' AND u.user_id = ug.user_id';
}
// Sorting and order
@@ -1224,92 +1225,112 @@ switch ($mode)
);
}
- $sql = 'SELECT session_user_id, MAX(session_time) AS session_time
- FROM ' . SESSIONS_TABLE . '
- WHERE session_time >= ' . (time() - $config['session_length']) . '
- AND session_user_id <> ' . ANONYMOUS . '
- GROUP BY session_user_id';
- $result = $db->sql_query($sql);
-
- $session_times = array();
- while ($row = $db->sql_fetchrow($result))
- {
- $session_times[$row['session_user_id']] = $row['session_time'];
- }
- $db->sql_freeresult($result);
-
- // Do the SQL thang
- $sql = "SELECT u.*
- $sql_select
+ // Get us some users :D
+ $sql = "SELECT u.user_id
FROM " . USERS_TABLE . " u
$sql_from
WHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")
- $sql_where
- ORDER BY $order_by";
+ $sql_where";
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
- $id_cache = array();
+ $user_list = array();
while ($row = $db->sql_fetchrow($result))
{
- $row['session_time'] = (!empty($session_times[$row['user_id']])) ? $session_times[$row['user_id']] : 0;
- $row['last_visit'] = (!empty($row['session_time'])) ? $row['session_time'] : $row['user_lastvisit'];
-
- $id_cache[$row['user_id']] = $row;
+ $user_list[] = (int) $row['user_id'];
}
$db->sql_freeresult($result);
-
- // Load custom profile fields
- if ($config['load_cpf_memberlist'])
- {
- include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
- $cp = new custom_profile();
-
- // Grab all profile fields from users in id cache for later use - similar to the poster cache
- $profile_fields_cache = $cp->generate_profile_fields_template('grab', array_keys($id_cache));
- }
- // If we sort by last active date we need to adjust the id cache due to user_lastvisit not being the last active date...
- if ($sort_key == 'l')
+ // So, did we get any users?
+ if (sizeof($user_list))
{
- $lesser_than = ($sort_dir == 'a') ? -1 : 1;
- uasort($id_cache, create_function('$first, $second', "return (\$first['last_visit'] == \$second['last_visit']) ? 0 : ((\$first['last_visit'] < \$second['last_visit']) ? $lesser_than : ($lesser_than * -1));"));
- }
+ // Session time?! Session time...
+ $sql = 'SELECT session_user_id, MAX(session_time) AS session_time
+ FROM ' . SESSIONS_TABLE . '
+ WHERE session_time >= ' . (time() - $config['session_length']) . '
+ AND ' . $db->sql_in_set('session_user_id', $user_list) . '
+ GROUP BY session_user_id';
+ $result = $db->sql_query($sql);
- $i = 0;
- foreach ($id_cache as $user_id => $row)
- {
- $cp_row = array();
- if ($config['load_cpf_memberlist'])
+ $session_times = array();
+ while ($row = $db->sql_fetchrow($result))
{
- $cp_row = (isset($profile_fields_cache[$user_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields_cache[$user_id]) : array();
+ $session_times[$row['session_user_id']] = $row['session_time'];
}
+ $db->sql_freeresult($result);
- $memberrow = array_merge(show_profile($row), array(
- 'ROW_NUMBER' => $i + ($start + 1),
-
- 'S_CUSTOM_PROFILE' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
- 'S_GROUP_LEADER' => (isset($row['group_leader']) && $row['group_leader']) ? true : false,
+ // Do the SQL thang
+ $sql = "SELECT u.*
+ $sql_select
+ FROM " . USERS_TABLE . " u
+ $sql_from
+ WHERE " . $db->sql_in_set('u.user_id', $user_list) . "
+ $sql_where_data
+ ORDER BY $order_by";
+ $result = $db->sql_query($sql);
- 'U_VIEW_PROFILE' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $user_id))
- );
+ $id_cache = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $row['session_time'] = (!empty($session_times[$row['user_id']])) ? $session_times[$row['user_id']] : 0;
+ $row['last_visit'] = (!empty($row['session_time'])) ? $row['session_time'] : $row['user_lastvisit'];
- if (isset($cp_row['row']) && sizeof($cp_row['row']))
+ $id_cache[$row['user_id']] = $row;
+ }
+ $db->sql_freeresult($result);
+
+ // Load custom profile fields
+ if ($config['load_cpf_memberlist'])
{
- $memberrow = array_merge($memberrow, $cp_row['row']);
+ include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
+ $cp = new custom_profile();
+
+ // Grab all profile fields from users in id cache for later use - similar to the poster cache
+ $profile_fields_cache = $cp->generate_profile_fields_template('grab', $user_list);
}
- $template->assign_block_vars('memberrow', $memberrow);
+ // If we sort by last active date we need to adjust the id cache due to user_lastvisit not being the last active date...
+ if ($sort_key == 'l')
+ {
+ $lesser_than = ($sort_dir == 'a') ? -1 : 1;
+ uasort($id_cache, create_function('$first, $second', "return (\$first['last_visit'] == \$second['last_visit']) ? 0 : ((\$first['last_visit'] < \$second['last_visit']) ? $lesser_than : ($lesser_than * -1));"));
+ }
- if (isset($cp_row['blockrow']) && sizeof($cp_row['blockrow']))
+ $i = 0;
+ foreach ($id_cache as $user_id => $row)
{
- foreach ($cp_row['blockrow'] as $field_data)
+ $cp_row = array();
+ if ($config['load_cpf_memberlist'])
{
- $template->assign_block_vars('memberrow.custom_fields', $field_data);
+ $cp_row = (isset($profile_fields_cache[$user_id])) ? $cp->generate_profile_fields_template('show', false, $profile_fields_cache[$user_id]) : array();
}
- }
- $i++;
- unset($id_cache[$user_id]);
+ $memberrow = array_merge(show_profile($row), array(
+ 'ROW_NUMBER' => $i + ($start + 1),
+
+ 'S_CUSTOM_PROFILE' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
+ 'S_GROUP_LEADER' => (isset($row['group_leader']) && $row['group_leader']) ? true : false,
+
+ 'U_VIEW_PROFILE' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $user_id))
+ );
+
+ if (isset($cp_row['row']) && sizeof($cp_row['row']))
+ {
+ $memberrow = array_merge($memberrow, $cp_row['row']);
+ }
+
+ $template->assign_block_vars('memberrow', $memberrow);
+
+ if (isset($cp_row['blockrow']) && sizeof($cp_row['blockrow']))
+ {
+ foreach ($cp_row['blockrow'] as $field_data)
+ {
+ $template->assign_block_vars('memberrow.custom_fields', $field_data);
+ }
+ }
+
+ $i++;
+ unset($id_cache[$user_id]);
+ }
}
// Generate page