From 2718217d3b1925ffd2d666694d7357835000ef38 Mon Sep 17 00:00:00 2001 From: matt Date: Sat, 29 Oct 2005 23:23:17 +0000 Subject: [PATCH] Some optimizations in queries and code. git-svn-id: http://svn.automattic.com/wordpress/trunk@2976 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions.php | 23 +++++++++++------- wp-includes/pluggable-functions.php | 26 ++++++++++++++++++--- wp-includes/template-functions-category.php | 2 +- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 8bb188d231..e1cbbfbcdf 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -1275,24 +1275,29 @@ function update_post_caches(&$posts) { // Get the categories for all the posts for ($i = 0; $i < count($posts); $i++) { - $post_id_list[] = $posts[$i]->ID; + $post_id_array[] = $posts[$i]->ID; $post_cache[$posts[$i]->ID] = &$posts[$i]; } - $post_id_list = implode(',', $post_id_list); + $post_id_list = implode(',', $post_id_array); update_post_category_cache($post_id_list); // Do the same for comment numbers - $comment_counts = $wpdb->get_results("SELECT ID, COUNT( comment_ID ) AS ccount - FROM $wpdb->posts - LEFT JOIN $wpdb->comments ON ( comment_post_ID = ID AND comment_approved = '1') - WHERE ID IN ($post_id_list) - GROUP BY ID"); + $comment_counts = $wpdb->get_results("SELECT comment_post_ID, COUNT( comment_ID ) AS ccount + FROM $wpdb->comments + WHERE comment_post_ID IN ($post_id_list) + AND comment_approved = '1' + GROUP BY comment_post_ID"); if ( $comment_counts ) { - foreach ($comment_counts as $comment_count) - $comment_count_cache["$comment_count->ID"] = $comment_count->ccount; + foreach ($comment_counts as $comment_count) { + $comment_count_cache["$comment_count->comment_post_ID"] = $comment_count->ccount; + $got_count[] = $comment_count->comment_post_ID; + } + foreach ( $post_id_array as $id ) + if ( !in_array( $id, $got_count ) ) + $comment_count_cache["$id"] = 0; } // Get post-meta info diff --git a/wp-includes/pluggable-functions.php b/wp-includes/pluggable-functions.php index e52eb56454..e88b272757 100644 --- a/wp-includes/pluggable-functions.php +++ b/wp-includes/pluggable-functions.php @@ -92,14 +92,34 @@ if ( !function_exists('get_userdatabylogin') ) : function get_userdatabylogin($user_login) { global $cache_userdata, $wpdb; $user_login = sanitize_user( $user_login ); + if ( empty( $user_login ) ) return false; + if ( isset( $cache_userdata[$user_login] ) ) return $cache_userdata[$user_login]; - - $user_id = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_login = '$user_login'"); - return get_userdata( $user_id ); + if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") ) + return $cache_userdata[$user_login] = false; + + $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'"); + + foreach ( $metavalues as $meta ) { + @ $value = unserialize($meta->meta_value); + if ($value === FALSE) + $value = $meta->meta_value; + $user->{$meta->meta_key} = $value; + + // We need to set user_level from meta, not row + if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) + $user->user_level = $meta->meta_value; + } + + $cache_userdata[$user->ID] = $user; + $cache_userdata[$cache_userdata[$user->ID]->user_login] =& $cache_userdata[$user->ID]; + + return $cache_userdata[$user->ID]; + } endif; diff --git a/wp-includes/template-functions-category.php b/wp-includes/template-functions-category.php index 1237a599f4..dd1dc1d1b2 100644 --- a/wp-includes/template-functions-category.php +++ b/wp-includes/template-functions-category.php @@ -24,7 +24,7 @@ function get_category_link($category_id) { $catlink = $wp_rewrite->get_category_permastruct(); if ( empty($catlink) ) { - $file = get_settings('home') . '/' . get_settings('blogfilename'); + $file = get_settings('home') . '/'; $catlink = $file . '?cat=' . $category_id; } else { $category = &get_category($category_id);