Make WordPress Core

Changeset 8738


Ignore:
Timestamp:
08/26/2008 07:18:58 PM (17 years ago)
Author:
ryan
Message:

Use a subquery in categorynot_in query if the DB version supports it. Props pedrop. fixes #7599

Location:
trunk/wp-includes
Files:
2 edited

Legend:

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

    r8667 r8738  
    10471047
    10481048        if ( !empty($q['category__not_in']) ) {
    1049             $ids = get_objects_in_term($q['category__not_in'], 'category');
    1050             if ( is_wp_error( $ids ) )
    1051                 return $ids;
    1052             if ( is_array($ids) && count($ids > 0) ) {
    1053                 $out_posts = "'" . implode("', '", $ids) . "'";
    1054                 $whichcat .= " AND $wpdb->posts.ID NOT IN ($out_posts)";
     1049            if ( $wpdb->supports_subqueries() ) {
     1050                $cat_string = "'" . implode("', '", $q['category__not_in']) . "'";
     1051                $whichcat .= " AND $wpdb->posts.ID NOT IN (SELECT $wpdb->term_relationships.object_id FROM $wpdb->term_relationships WHERE $wpdb->term_relationships.term_taxonomy_id IN ($cat_string) )";
     1052            } else {
     1053                $ids = get_objects_in_term($q['category__not_in'], 'category');
     1054                if ( is_wp_error( $ids ) )
     1055                    return $ids;
     1056                if ( is_array($ids) && count($ids > 0) ) {
     1057                    $out_posts = "'" . implode("', '", $ids) . "'";
     1058                    $whichcat .= " AND $wpdb->posts.ID NOT IN ($out_posts)";
     1059                }
    10551060            }
    10561061        }
  • trunk/wp-includes/wp-db.php

    r8600 r8738  
    925925
    926926    /**
     927     * Whether of not the database version supports sub-queries.
     928     *
     929     * @since 2.7
     930     *
     931     * @return bool True if sub-queries are supported, false if version does not
     932     */
     933    function supports_subqueries() {
     934        return ( version_compare(mysql_get_server_info($this->dbh), '4.1.0', '>=') );
     935    }
     936
     937    /**
    927938     * Retrieve the name of the function that called wpdb.
    928939     *
Note: See TracChangeset for help on using the changeset viewer.