Make WordPress Core


Ignore:
Timestamp:
09/05/2010 01:31:33 PM (15 years ago)
Author:
scribu
Message:

introduce _wp_meta_sql(). Preparation for adding blog_id to WP_User_Query. See #14572

File:
1 edited

Legend:

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

    r15496 r15565  
    42204220
    42214221/*
     4222 * Used internally to generate an SQL string for searching across multiple meta key = value pairs
     4223 *
     4224 * @access private
     4225 * @since 3.1.0
     4226 *
     4227 * @param array $queries An array of queries
     4228 * @return string
     4229 */
     4230function _wp_meta_sql( $queries, $meta_id_column, $table ) {
     4231    global $wpdb;
     4232
     4233    $clauses = array();
     4234
     4235    foreach ( $queries as $query ) {
     4236        $meta_key = trim( @$query['meta_key'] );
     4237        $meta_value = trim( @$query['meta_value'] );
     4238        $meta_compare = @$query['meta_compare'];
     4239
     4240        if ( empty( $meta_compare ) || !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'like' ) ) )
     4241            $meta_compare = '=';
     4242
     4243        if ( empty( $meta_key ) )
     4244            continue;
     4245
     4246        $clause = $wpdb->prepare( "WHEN %s THEN meta_value ", $meta_key );
     4247
     4248        if ( empty( $meta_value ) ) {
     4249            $clauses[] = $clause . "IS NOT NULL";
     4250        } elseif ( 'like' == $meta_compare ) {
     4251            $clauses[] = $clause . $wpdb->prepare( "LIKE %s", '%' . like_escape( $meta_value ) . '%' );
     4252        } else {
     4253            $clauses[] = $clause . $wpdb->prepare( "$meta_compare %s", $meta_value );
     4254        }
     4255    }
     4256
     4257    if ( empty( $clauses ) )
     4258        return '';
     4259
     4260    return "
     4261        SELECT $meta_id_column
     4262        FROM $table
     4263        WHERE CASE meta_key
     4264        " . implode( "\n", $clauses ) . "
     4265        END
     4266        GROUP BY $meta_id_column
     4267        HAVING COUNT(*) = " . count( $clauses );
     4268}
     4269
     4270
     4271/*
    42224272 * Used internally to tidy up the search terms
    42234273 *
Note: See TracChangeset for help on using the changeset viewer.