Use inner joins instead of left joins for taxonomy. Inner is faster. fixes #5179 for 2.3
git-svn-id: http://svn.automattic.com/wordpress/branches/2.3@6253 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
9c3151f5bb
commit
d0314e0336
|
@ -113,7 +113,7 @@ function get_bookmarks($args = '') {
|
||||||
}
|
}
|
||||||
if (!empty($category_query)) {
|
if (!empty($category_query)) {
|
||||||
$category_query .= ") AND taxonomy = 'link_category'";
|
$category_query .= ") AND taxonomy = 'link_category'";
|
||||||
$join = " LEFT JOIN $wpdb->term_relationships AS tr ON ($wpdb->links.link_id = tr.object_id) LEFT JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id";
|
$join = " INNER JOIN $wpdb->term_relationships AS tr ON ($wpdb->links.link_id = tr.object_id) INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_option('links_recently_updated_time')) {
|
if (get_option('links_recently_updated_time')) {
|
||||||
|
|
|
@ -932,7 +932,7 @@ class WP_Query {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !empty($q['category__in']) ) {
|
if ( !empty($q['category__in']) ) {
|
||||||
$join = " LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
||||||
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
|
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
|
||||||
$include_cats = "'" . implode("', '", $q['category__in']) . "'";
|
$include_cats = "'" . implode("', '", $q['category__in']) . "'";
|
||||||
$whichcat .= " AND $wpdb->term_taxonomy.term_id IN ($include_cats) ";
|
$whichcat .= " AND $wpdb->term_taxonomy.term_id IN ($include_cats) ";
|
||||||
|
@ -973,7 +973,7 @@ class WP_Query {
|
||||||
|
|
||||||
$q['cat'] = $reqcat;
|
$q['cat'] = $reqcat;
|
||||||
|
|
||||||
$join = " LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
||||||
$whichcat = " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
|
$whichcat = " AND $wpdb->term_taxonomy.taxonomy = 'category' ";
|
||||||
$in_cats = array($q['cat']);
|
$in_cats = array($q['cat']);
|
||||||
$in_cats = array_merge($in_cats, get_term_children($q['cat'], 'category'));
|
$in_cats = array_merge($in_cats, get_term_children($q['cat'], 'category'));
|
||||||
|
@ -1015,7 +1015,7 @@ class WP_Query {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !empty($q['tag__in']) ) {
|
if ( !empty($q['tag__in']) ) {
|
||||||
$join = " LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
|
||||||
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'post_tag' ";
|
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'post_tag' ";
|
||||||
$include_tags = "'" . implode("', '", $q['tag__in']) . "'";
|
$include_tags = "'" . implode("', '", $q['tag__in']) . "'";
|
||||||
$whichcat .= " AND $wpdb->term_taxonomy.term_id IN ($include_tags) ";
|
$whichcat .= " AND $wpdb->term_taxonomy.term_id IN ($include_tags) ";
|
||||||
|
@ -1025,7 +1025,7 @@ class WP_Query {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !empty($q['tag_slug__in']) ) {
|
if ( !empty($q['tag_slug__in']) ) {
|
||||||
$join = " LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) LEFT JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id) ";
|
$join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id) ";
|
||||||
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'post_tag' ";
|
$whichcat .= " AND $wpdb->term_taxonomy.taxonomy = 'post_tag' ";
|
||||||
$include_tags = "'" . implode("', '", $q['tag_slug__in']) . "'";
|
$include_tags = "'" . implode("', '", $q['tag_slug__in']) . "'";
|
||||||
$whichcat .= " AND $wpdb->terms.slug IN ($include_tags) ";
|
$whichcat .= " AND $wpdb->terms.slug IN ($include_tags) ";
|
||||||
|
@ -1056,7 +1056,7 @@ class WP_Query {
|
||||||
$taxonomy_field = $item == 'tag_slug__and' ? 'slug' : 'term_id';
|
$taxonomy_field = $item == 'tag_slug__and' ? 'slug' : 'term_id';
|
||||||
|
|
||||||
$q[$item] = array_unique($q[$item]);
|
$q[$item] = array_unique($q[$item]);
|
||||||
$tsql = "SELECT p.ID FROM $wpdb->posts p LEFT JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id) LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) LEFT JOIN $wpdb->terms t ON (tt.term_id = t.term_id)";
|
$tsql = "SELECT p.ID FROM $wpdb->posts p INNER JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id) INNER JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) INNER JOIN $wpdb->terms t ON (tt.term_id = t.term_id)";
|
||||||
$tsql .= " WHERE tt.taxonomy = '$taxonomy' AND t.$taxonomy_field IN ('" . implode("', '", $q[$item]) . "')";
|
$tsql .= " WHERE tt.taxonomy = '$taxonomy' AND t.$taxonomy_field IN ('" . implode("', '", $q[$item]) . "')";
|
||||||
$tsql .= " GROUP BY p.ID HAVING count(p.ID) = " . count($q[$item]);
|
$tsql .= " GROUP BY p.ID HAVING count(p.ID) = " . count($q[$item]);
|
||||||
|
|
||||||
|
|
|
@ -1357,7 +1357,7 @@ function _pad_term_counts(&$terms, $taxonomy) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the object and term ids and stick them in a lookup table
|
// Get the object and term ids and stick them in a lookup table
|
||||||
$results = $wpdb->get_results("SELECT object_id, term_taxonomy_id FROM $wpdb->term_relationships LEFT JOIN $wpdb->posts ON object_id = ID WHERE term_taxonomy_id IN (".join(',', array_keys($term_ids)).") AND post_type = 'post' AND post_status = 'publish'");
|
$results = $wpdb->get_results("SELECT object_id, term_taxonomy_id FROM $wpdb->term_relationships INNER JOIN $wpdb->posts ON object_id = ID WHERE term_taxonomy_id IN (".join(',', array_keys($term_ids)).") AND post_type = 'post' AND post_status = 'publish'");
|
||||||
foreach ( $results as $row ) {
|
foreach ( $results as $row ) {
|
||||||
$id = $term_ids[$row->term_taxonomy_id];
|
$id = $term_ids[$row->term_taxonomy_id];
|
||||||
++$term_items[$id][$row->object_id];
|
++$term_items[$id][$row->object_id];
|
||||||
|
|
Loading…
Reference in New Issue