[wp-trac] [WordPress Trac] #21617: Sorting on meta_key breaks meta query with 'OR' relation
WordPress Trac
wp-trac at lists.automattic.com
Fri Aug 17 05:19:27 UTC 2012
#21617: Sorting on meta_key breaks meta query with 'OR' relation
--------------------------+-----------------------------
Reporter: Tomauger | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
--------------------------+-----------------------------
"Breaks" may have been a harsh term here. Things are working as they are
supposed to, but there is room for improvement:
{{{
$movies = new WP_Query( array(
'meta_query' => array (
'relation' => 'OR',
array(
'key' => 'Year',
'value' => 2000,
'type' => 'numeric',
'compare' => '>='
),
array(
'key' => 'Rating',
'value' => 10,
'type' => 'numeric',
'compare' => '='
)
),
'meta_key' => 'Rating',
'orderby' => 'meta_value_num',
'posts_per_page' => -1
) );
}}}
Here, the desired outcome is to show movies from 2000 onward, but to also
include any other movies that have a rating of '10'.
We currently need to specify the meta_key again, outside the meta_query in
order to get the 'orderby' to work. Unfortunately this has the result of
blowing away the meta query AND it seems to also not respect the order_by.
Here's the generated SQL:
{{{
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
WHERE 1=1 AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND (wp_postmeta.meta_key = 'Rating'
OR (mt1.meta_key = 'Year'
AND CAST(mt1.meta_value AS SIGNED) >= '2000')
OR (mt2.meta_key = 'Rating'
AND CAST(mt2.meta_value AS SIGNED) = '10')
)
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 DESC
}}}
Note the wp_postmeta.meta_key = "Rating" OR - is what's causing most of
the ruckus (though the sort is still broken too, wondering about the +0,
though at first glance that appears to be OK).
This is probably a duplicate, but I can't seem to find the original thread
about sorting and post meta.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/21617>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list