WordPress.org

Make WordPress Core

Changeset 15579


Ignore:
Timestamp:
09/06/2010 08:09:41 AM (10 years ago)
Author:
scribu
Message:

Rewrite WP_User_Query to use JOIN instead of subquery. See #14572

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/functions.php

    r15574 r15579  
    42454245 * @param array $queries An array of queries
    42464246 * @param string $meta_id_column The column that holds the object id
    4247  * @param string $table Which meta table to look in
    42484247 * @return string
    42494248 */
    4250 function _wp_meta_sql( $queries, $meta_id_column, $table ) {
     4249function _wp_meta_sql( $queries, $meta_id_column ) {
    42514250    global $wpdb;
    42524251
     
    42794278
    42804279    return "
    4281         SELECT $meta_id_column
    4282         FROM $table
    4283         WHERE CASE meta_key
     4280        AND CASE meta_key
    42844281        " . implode( "\n", $clauses ) . "
    42854282        END
  • trunk/wp-includes/user.php

    r15574 r15579  
    464464        $meta_queries[] = wp_array_slice_assoc( $qv, array( 'meta_key', 'meta_value', 'meta_compare' ) );
    465465
    466         $meta_query_sql = _wp_meta_sql( $meta_queries, 'user_id', $wpdb->usermeta );
     466        $meta_query_sql = _wp_meta_sql( $meta_queries, 'user_id' );
    467467
    468468        if ( !empty( $meta_query_sql ) ) {
    469             $this->query_where .= " AND $wpdb->users.ID IN ($meta_query_sql)";
     469            $this->query_from .= " INNER JOIN $wpdb->usermeta ON ($wpdb->users.ID = $wpdb->usermeta.user_id)";
     470            $this->query_where .= $meta_query_sql;
    470471        }
    471472
     
    491492        global $wpdb;
    492493
    493         $this->results = $wpdb->get_col("SELECT DISTINCT($wpdb->users.ID)" . $this->query_from . $this->query_where . $this->query_orderby . $this->query_limit);
     494        $this->results = $wpdb->get_col("SELECT $wpdb->users.ID" . $this->query_from . $this->query_where . $this->query_orderby . $this->query_limit);
    494495
    495496        if ( !$this->results )
     
    497498
    498499        if ( $this->query_vars['count_total'] )
    499             $this->total_users = $wpdb->get_var("SELECT COUNT(DISTINCT($wpdb->users.ID))" . $this->query_from . $this->query_where);
     500            $this->total_users = $wpdb->get_var("SELECT COUNT($wpdb->users.ID)" . $this->query_from . $this->query_where);
    500501
    501502        if ( 'all' == $this->query_vars['fields'] ) {
Note: See TracChangeset for help on using the changeset viewer.