2016-01-27 6 views
0

У меня есть ниже PHP: -WP_Query, используя и с или

$args = array(
     'posts_per_page'=> -1, 
     'post_type'  => 'jobs', 
     'order'    => 'ASC', 
     's' => $search_field, 
     'meta_query' => array(
      'relation' => 'AND', 
      array(
       'key'  => 'job_salary_from', 
       'value'  => $job_salary_from, 
       'compare' => '>=', 
      ), 
      array(
       'key'  => 'job_salary_from', 
       'value'  => $job_salary_to, 
       'compare' => '<=', 
      ), 
      array(
      'relation' => 'OR', 
      array(
       'key'  => 'job_salary_to', 
       'value'  => $job_salary_from, 
       'compare' => '>=', 
      ), 
      array(
       'key'  => 'job_salary_to', 
       'value'  => $job_salary_to, 
       'compare' => '<=', 
      ), 
     ))    
    ); 

Lets говорят, что есть работа, которая составляет от 19000 до 22000 под названием 'ABC', так job_salary_from = 19000 и job_salary_to = 22000 .

Теперь давайте говорить я ищу работу, которая находится между 10000 и 19000, так $job_salary_from = 10000 и $job_salary_to = 19999.

Это проявляется, когда я делаю поиск, который является правильным. Однако, если я ищу работу, которая находится между 20000 и 29999, поэтому $job_salary_from = 19999 и $job_salary_to = 29999 ничего не отображается.

Где должно быть указано «ABC», поскольку $job_salary_to находится в пределах поискового кронштейна.

Любая помощь будет высоко оценена.

ответ

1

Я думаю, что синтаксис meta_query не совсем прав. Попробуйте это:

$args = array(
    'posts_per_page'=> -1, 
    'post_type'  => 'jobs', 
    'order'    => 'ASC', 
    's' => $search_field, 
    'meta_query' => array(
     'relation' => 'OR', 

     array(
      'relation' => 'AND', 
      array(
       'key'  => 'job_salary_to', 
       'value'  => $job_salary_from, 
       'type' => 'numeric', //for each case 
       'compare' => '>=', 
      ), 
      array(
       'key'  => 'job_salary_to', 
       'value'  => $job_salary_to, 
       'type' => 'numeric', 
       'compare' => '<=', 
      ), 
     ), 

     array(
      'relation' => 'AND', 
      array(
       'key'  => 'job_salary_from', 
       'value'  => $job_salary_from, 
       'type' => 'numeric', 
       'compare' => '>=', 
      ), 
      array(
       'key'  => 'job_salary_from', 
       'value'  => $job_salary_to, 
       'type' => 'numeric', 
       'compare' => '<=', 
      ), 
     ) 
    ) 
); 

Также вы можете попробовать использовать BETWEEN, даже я не уверен, если это включено или эксклюзивные сравнения.

+0

Да это синтаксис запроса, в сочетании это с помощью BETWEEN, как решение @Saurabh Srb и это все работает как ожидалось :) – nsilva

+1

Добро пожаловать, но, как я сожалею, вы должны проверить, будет ли 'BETWEEN' выполнять точно такую ​​же работу для лимитных случаев. Возможно, вы должны добавить или вычесть 1, чтобы сделать запрос таким же, как и выше: – pgk

1

Это потому, что существует другая функция для получения результатов между диапазоном.

Попробуйте следующий пример, чтобы получить результаты между диапазоном

$args = array(
    'post_type' => 'product', 
    'meta_query' => array(
     array(
      'key'  => 'color', 
      'value' => 'blue', 
      'compare' => 'NOT LIKE', 
     ), 
     array(
      'key' => 'price', 
      'value' => array(20, 100), 
      'type' => 'numeric', 
      'compare' => 'BETWEEN', 
     ), 
    ), 
); 
$query = new WP_Query($args); 

Больше ресурсов здесь https://codex.wordpress.org/Class_Reference/WP_Query