2012-03-21 3 views
1

Ive написал запрос, который выполняет поиск всех сообщений, имеющих X в качестве значения мета/настраиваемого поля.PHP/MySQL query find string в поле

// 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 значение для каждого мета ключ, и это работает отлично, я хочу, однако, имеют несколько значений.

Например ...

"газ, электричество, вода"

Когда я добавляю несколько значений, однако запрос возвращает нуль, я presumer его потому, что им говорят, если ...

postmeta.meta_value = '$customvalue' 

Может ли кто-нибудь дать мне совет о том, где я ошибаюсь?

ответ

0

Почему вы не используете встроенный WP QUERY, он поддерживает операторы массива мета-полей.

, например:

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

Ref: http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

+0

Я попробовал этот @Wyck только он не кажется искать в моем поле для матча ... – Liam

+0

Вы пробовали выход с помощью 'get_post_custom' http://codex.wordpress.org/Function_Reference/get_post_custom, включить отладку, http://debugggg.wordpress.com/ – Wyck

0

Если вы используете несколько совпадений в предложении where запроса, вы должны использовать вариант IN istead of =.

Единственная строка я вижу в запросе, где вы используете $ customvalue здесь

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

Вы должны изменить = в и разделите значения с, и кавычки «», как это, например

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

Я сбросил $ customvalue в приведенном выше коде, чтобы сделать точку разделителя значения IN.

Надеюсь, это положит вас на правильный путь.

+0

Благодаря @guzzie, то 'customvalue' является переменной, которая имеет значение, установленное с помощью POST – Liam