Der komplexe WP_User_Query-Aufruf schlägt auf dem Produktionsserver fehl

Ich habe ein sehr spezifisches und schwer zu debugendes Problem mit einer komplexen Meta-Abfrage in einem WP_User_Query Aufruf:

Ich verwende diesen (vereinfachten) Code, um die Abfrage zu erstellen:

 // custom user role $arguments = array( 'role' => 'member' ); // number and offset $arguments['number'] = 10; $arguments['offset'] = 0; $meta = array(); $meta['relation'] = 'AND'; // filter one (array) $meta[] = array( 'key' => 'field-one', 'value' => $values, 'compare' => 'IN' ); // filter two $meta[] = array( 'key' => 'field-two', 'value' => 0, 'compare' => '=' ); // filter three $meta[] = array( 'key' => 'field-three', 'value' => 0, 'compare' => '=' ); // even more filter foreach( $filter as $key => $value ) { $meta[] = array( 'key' => 'field-' . $key, 'value' => $value, 'compare' => 'LIKE' ); } $arguments['meta_query'] = $meta; // orderby $arguments['meta_key'] = 'last_name'; $arguments['orderby'] = 'meta_value'; $query = new WP_User_Query( $arguments ); 

Auf meinem localhost (MySQL Version 5.6.23) gibt es korrekt Ergebnisse und die korrekten $query->total_users . Auf der Produktions-Site (MySQL-Version 5.5.42-37.1-log) ist $query->get_results() leer, aber $query->total_users zeigt eine beliebige Zahl.

Wenn ich das WP_User_Query Objekt WP_User_Query kann ich die resultierende SQL-Abfrage überprüfen, die auf meinem WP_User_Query und auf dem Produktionsserver identisch ist:

 DISTINCT SQL_CALC_FOUND_ROWS wp_users.* [query_from] => FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id ) INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id ) INNER JOIN wp_usermeta AS mt2 ON ( wp_users.ID = mt2.user_id ) INNER JOIN wp_usermeta AS mt3 ON ( wp_users.ID = mt3.user_id ) INNER JOIN wp_usermeta AS mt4 ON ( wp_users.ID = mt4.user_id ) INNER JOIN wp_usermeta AS mt5 ON ( wp_users.ID = mt5.user_id ) [query_where] => WHERE 1=1 AND ( ( ( wp_usermeta.meta_key = 'last_name' AND ( ( mt1.meta_key = 'field-one' AND CAST(mt1.meta_value AS CHAR) IN ('professional','member','junior') ) AND ( mt2.meta_key = 'field-two' AND CAST(mt2.meta_value AS CHAR) = '0' ) AND ( mt3.meta_key = 'field-three' AND CAST(mt3.meta_value AS CHAR) = '0' ) AND ( mt4.meta_key = 'field-four' AND CAST(mt4.meta_value AS CHAR) LIKE '%my-value%' ) ) ) AND ( mt5.meta_key = 'wp_capabilities' AND CAST(mt5.meta_value AS CHAR) LIKE '%\"member\"%' ) ) ) [query_orderby] => ORDER BY wp_usermeta.meta_value ASC [query_limit] => LIMIT 20 ) 

Irgendeine Idee, was könnte daran falsch sein?

Solutions Collecting From Web of "Der komplexe WP_User_Query-Aufruf schlägt auf dem Produktionsserver fehl"

Bei der Ausführung der generierten SQL-statement in MySQL gab es mir

 The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay 

Um das zu beheben, musste ich $wpdb->query( 'SET OPTION SQL_BIG_SELECTS = 1' ); direkt vor dem Aufruf von WP_User_Query .