2016-12-27 39 views
0

我有想將值傳遞到一個數組以下查詢:WordPress的元查詢與多值陣列

$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
    array(
    'key'  => '_customer_names', 
    'value' => $customer_names, 
    'compare' => '=' 
     ), 
    array(
    'key'  => '_customer_dates', 
    'value' => $customer_dates, 
    'compare' => 'LIKE' 
      ) 
     ) 
    ) 
); 

例如,我想通過這樣的:

$customer_names = array('John','Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 

該查詢還需要處理所有客戶可能擁有每個日期的數據的可能性。在僞SQL中,我的最佳猜測是:

SELECT * FROM WORDPRESS_POSTS WHERE _customer_names = (John OR Tom OR Simon) AND customer_dates = (20161225 OR 20161226 OR 20161227) 

但是,此刻,即使當我刪除日期限制時,我也找不到任何帖子。因此,我想確認我的邏輯是正確的。

+0

變化'get_posts'以'新WP_QUERY'和'的var_dump ($ data-> request)'來打印對你的'args'運行的查詢 – Noman

回答

0

嘗試這樣的:

$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
      'relation' => 'AND', 
      array(
       'relation' => 'OR', 
       array(
        'key' => '_customer_names', 
        'value' => 'John', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_names', 
        'value' => 'Tom', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_names', 
        'value' => 'Simon', 
        'compare' => '=' 
       ) 
      ), 

      array(
       'relation' => 'OR', 
       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ) 
      ), 
     ) 
    ) 
); 
+0

謝謝Ravendra,但我不會提前知道數組值,可能有1或100,因此擴展查詢不是一個好主意。 – Colin

+0

在這種情況下,您應該準備自定義查詢並像這樣運行$ wbdb-> query($ custom_query); –

+0

你也可以使用循環來準備上面的查詢。像$ metaq1 =使用循環準備數組,然後$ metaq2 =使用循環準備數組,然後在上面的查詢中使用這些數組變量。如果還沒有得到,給我你的電子郵件地址,我會給你發送示例代碼。 –

0

如果你想在你需要使用compareIN子句值使用數組。

或者如果您想與精確值匹配,您可以嘗試@Ravendra Patel的解決方案。

還可以使用WP_QUERY因爲它與主查詢,並提供更多的幫助,以確定問題

$customer_names = array('John', 'Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 
$args   = array(
    'post_type'  => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query'  => array(
     array(
      'key'  => '_customer_names', 
      'value' => $customer_names, 
      'compare' => 'IN' 
     ), 
     array(
      'key'  => '_customer_dates', 
      'value' => $customer_dates, 
      'compare' => 'IN' 
     ) 
    ) 
); 
$query   = new WP_QUERY($args); 
echo 'SQL: '.$query->request.'<br>'; // your query against args 
0

嘗試這樣的:

$customer_names = array('John', 'Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 

$cm_metaq = array(); 
foreach($customer_names as $cm){ 
    $cm_metaq[] = array('key' => '_customer_names', 'value' => $cm, 'compare' => '='); 
} 
$cd_metaq = array(); 
foreach($customer_dates as $cd){ 
    $cd_metaq[] = array('key' => '_customer_dates', 'value' =>$cd, 'compare' => '='); 
} 


$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
      'relation' => 'AND', 
      array(
       'relation' => 'OR', 
       $cm_metaq 
      ), 

      array(
       'relation' => 'OR', 
       $cd_metaq 
      ), 
     ) 
    ) 
);