Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
03/05/2018 08:44:16 AM (7 years ago)
Author:
djpaul
Message:

Members, search: split user matching into seperate query.

Removing the subquery decreases the amount of rows MySQL needs to look at in the bp_activity table.
In the future, if we or WordPress add a user cache incrementor, we could cache this query.

Fixes #7442

Props brandonliles, r-a-y, boonebgorges

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/classes/class-bp-user-query.php

    r11705 r11886  
    414414            }
    415415
    416             $sql['where']['search'] = $wpdb->prepare(
    417                 "u.{$this->uid_name} IN ( SELECT ID FROM {$wpdb->users} WHERE ( user_login LIKE %s OR user_login LIKE %s OR user_nicename LIKE %s OR user_nicename LIKE %s ) )",
     416            $matched_user_ids = $wpdb->get_col( $wpdb->prepare(
     417                "SELECT ID FROM {$wpdb->users} WHERE ( user_login LIKE %s OR user_login LIKE %s OR user_nicename LIKE %s OR user_nicename LIKE %s )",
    418418                $search_terms_nospace,
    419419                $search_terms_space,
    420420                $search_terms_nospace,
    421421                $search_terms_space
    422             );
     422            ) );
     423
     424            $match_in_clause = empty( $matched_user_ids) ? 'NULL' : implode( ',', $matched_user_ids );
     425            $sql['where']['search'] = "u.{$this->uid_name} IN ({$match_in_clause})";
    423426        }
    424427
Note: See TracChangeset for help on using the changeset viewer.