Custom WordPress SQL query for multiple meta values
To check for multiple custom fields you have to join the meta table twice.
<?php
global $wpdb;
$query = "
SELECT *
FROM {$wpdb->prefix}posts
INNER JOIN {$wpdb->prefix}postmeta m1
ON ( {$wpdb->prefix}posts.ID = m1.post_id )
INNER JOIN {$wpdb->prefix}postmeta m2
ON ( {$wpdb->prefix}posts.ID = m2.post_id )
WHERE
{$wpdb->prefix}posts.post_type = 'post'
AND {$wpdb->prefix}posts.post_status = 'publish'
AND ( m1.meta_key = 'date' AND m1.meta_value > '2010-12-05 00:00:00' )
AND ( m1.meta_key = 'date' AND m1.meta_value < '2010-12-12 00:00:00' )
AND ( m2.meta_key = 'some_other_meta_value' AND m2.meta_value != '' )
GROUP BY {$wpdb->prefix}posts.ID
ORDER BY {$wpdb->prefix}posts.post_date
DESC;
";
?>
I am Nicolas Kuttler, a web developer, system administrator and IT consultant from France, currently living in Germany.
Your code helped me very much.
Have you ever had an issue with a query not returning any results for items that exist in the database?
Thanks.
"SELECT * FROM " . $wpdb->prefix . "cp_ad_pop_total a "
. "INNER JOIN " . $wpdb->posts . " p ON p.ID = a.postnum LEFT JOIN ". $wpdb->postmeta. "pm on p.ID =pm.post_id WHERE post_status = 'publish' AND post_type = '".APP_POST_TYPE."' AND pm.metakey='Boost_ad' and pm.metavalue!=''""
. "ORDER BY p.post_date DESC"
I not using SQL at all, but I'm trying to display all posts without a value in the specified key:
http://pastebin.com/urXJ6sAq