2012-03-21 10 views
1

Iveはメタ/カスタムフィールド値としてXを持つすべての投稿を検索するクエリを作成しました。PHP/MySQLクエリーはフィールドに文字列を見つける

// PSV National Query 
     if ($_POST['vehicleType'] == 'psv' && $_POST['coverageRegion'] == 'national') {   

      $customkey = 'vehicleType'; 
      $customvalue = $_POST['vehicleType']; 

      $customkey1 = 'coverageRegion'; 
      $customvalue1 = $_POST['coverageRegion']; 

      $customkey2 = 'locationType'; 
      $customvalue2 = $_POST['locationType']; 

      global $wpdb; 
      $my_posts = $wpdb->get_results(" 
       SELECT $wpdb->posts.* 
       FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1 
       WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 

       AND $wpdb->postmeta.meta_key = '$customkey' 
       AND $wpdb->postmeta.meta_value = '$customvalue' 
       AND mt1.meta_key = '$customkey1' 
       AND mt1.meta_value = '$customvalue1' 
       AND mt2.meta_key = '$customkey2' 
       AND mt2.meta_value = '$customvalue2' 

       AND $wpdb->posts.post_status = 'publish' 
       AND $wpdb->posts.post_type = 'post' 
       ORDER BY $wpdb->posts.post_date DESC 
      "); 

      $args = array(
      'meta_query' => array(
      array(
       'key' => $customkey, 
       'value' => $customvalue, 
       'compare' => '=' 
      ), 
      array(
       'key' => $customkey1, 
       'value' => $customvalue1, 
       'compare' => '=' 
      ), 
      array(
       'key' => $customkey2, 
       'value' => $customvalue2, 
       'compare' => '=' 
      ) 
      ) 
      ); 
      $query = new WP_Query($args); 

      foreach ($query as $post) : 
      setup_postdata($post); 

      echo '<div><a href="'; 
      the_permalink(); 
      echo '"></div>'; 
      the_title(); 

      endforeach; 

     } 

私のポストでは、各メタキーに1つの値があり、これは問題なく動作しますが、複数の値を設定したいと考えています。

例えば

...

"ガス、電気、水道、"

クエリはnullを返しますが、私は複数の値を追加すると

postmeta.meta_value = '$customvalue' 
...場合イムが言っているので、私はそのをpresumer

誰かがどこに間違っているのかアドバイスできますか?

答えて

0

組み込みのWP QUERYを使用しない理由は、メタフィールド配列演算子をサポートしています。例えば

$query = new WP_Query(array( 
          'meta_key'  => 'color', 
          'meta_value' => 'blue', 
          'meta_compare' => '!=' 
         )); 

参考:http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

+0

を経由して設定された値を持つ変数であり、@guzzie私のフィールド内で一致するものを検索するには... – Liam

+0

'get_post_custom'を使って出力を試しましたか?http://codex.wordpress.org/Function_Reference/get_post_custom、デバッグをオンにする、http://debugggg.wordpress.com/ – Wyck

0

クエリのwhere句で複数の一致を使用する場合は、=のIN variantのisteadを使用する必要があります。

私はあなたが$ customvalueを使用するクエリで見るだけの行は、あなたがINに=を変更して値を区切る必要があり、ここで

AND $wpdb->postmeta.meta_value = '$customvalue' 

で、引用符「」このような例

AND $wpdb->postmeta.meta_value IN ('gas','electricity','water') 

上記のコードで$ customvalueを切り捨てて、IN値のセパレータのポイントを作成しました。

うまくいけば、これは正しい軌道に乗ることを望みます。

+0

おかげで 'customvalueは、' 私は思えるだけdoesntのこの@Wyckを試してみたPOST – Liam

関連する問題