2016-04-25 25 views
0

你好,我需要做一个查询,计算meta_key类似状态和meta_value像Unplaced,并且相同的职位有一个meta_key像issue_date和meta_value像两天之间的日期。例如,我有这样的一个表:我怎么能在wordpress中做子查询

id_meta post_id meta_key meta_valuue 
     1  1 status  Unplaced 
     2  1 issue_date 20160428 
     3  2 status  VIP 
     4  2 issue_date 20160428 
     5  3 status  Placed 
     6  3 issue_date 20160427 
     7  4 status  Unplaced 
     8  4 issue_date 20160420 

我想查询只返回1,因为只有一个帖子有状态未放置和21和28之间的查询的ISSUE_DATE,我写的是:

$results = $wpdb->get_var(" 
SELECT COUNT(*) 
    FROM wp_posts 
    , wp_postmeta 
WHERE meta.key = 'status' 
    AND meta_value LIKE '%Unplaced%' 
    AND post_id = ID 
    AND post_status <> 'trash' 
    AND post_id IN (SELECT post_id 
         FROM wp_postmeta 
        WHERE meta_key = 'issue_date' 
         AND meta_value >= '20160421' 
         AND meta_value <= '20160428') 
"); 

我需要该帖子不在垃圾箱中。

谢谢!!!!

回答

0

如:

SELECT s.post_id 
    , s.meta_value status 
    , i.meta_value issue_date 
    FROM wp_posts s 
    JOIN wp_posts i 
    ON i.post_id = s.post_id 
WHERE s.meta_key = 'status' 
    AND s.meta_value = 'Unplaced' 
    AND i.meta_key = 'issue_date' 
    AND i.meta_value BETWEEN '20160421' AND '20160428'; 
1

您可以构建一个meta_query指定参数和传递给WP_Query这样

$args = array(
    'meta_query' => array(
     array(
      'key'  => 'status', 
      'value' => 'Unplaced', 
      'compare' => '=', 
     ), 
     array(
      'key' => 'issue_date', 
      'value' => array('2016-04-21', '2016-04-28'), 
      'type' => 'date', 
      'compare' => 'BETWEEN', 
     ), 
    ), 
); 
$query = new WP_Query($args); 

//Then get count like this 
$query->found_posts; 

类型DATE应在格式YYYY-MM-DD的比较值BETWEEN到工作。

了解更多关于WP_Query here$found_postshere