Intereting Posts

Большой выбор времени запроса OR OR

Я работаю над плагином календаря wordpress и сталкивается с проблемой с настраиваемыми полями. Я могу сделать два отдельных запроса для повторных событий и один для статических событий, но когда я пытаюсь объединить их, мои сценарии обрабатываются до тех пор, пока сервер не выйдет из строя и не перезапустит mysql …

$args = array( 'numberposts' => -1, 'post_type' => 'events', 'meta_query' => array( 'relation' => 'OR', array( 'relation' => 'AND', array( 'key' => 'calendar', 'value' => $cid, 'compare' => '='), array( 'key' => 'event_date', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '='), array( 'key' => 'event_category', 'value' => '"'.$category.'"', 'compare' => 'LIKE'), ), array( 'relation' => 'AND', array( 'key' => 'calendar', 'value' => $cid, 'compare' => '='), array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'repeat_until', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '>'), array( 'key' => 'event_category', 'value' => '"'.$category.'"', 'compare' => 'LIKE') ), ) ); $the_query = new WP_Query( $args ); 

ОБНОВИТЬ:

Пожалуйста, помогите мне разобраться, почему верх не работает, но код ниже. Я взял точный код и разбил его на два запроса, а затем объединил их в один.

 $static = array( 'numberposts' => -1, 'post_type' => 'protean_event', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'calendar', 'value' => $cid, 'compare' => '='), array( 'key' => 'event_date', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '='), array( 'key' => 'event_category', 'value' => $category, 'compare' => 'LIKE'), ) ); $repeating = array( 'numberposts' => -1, 'post_type' => 'protean_event', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'calendar', 'value' => $cid, 'compare' => '='), array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'repeat_until', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '>'), array( 'key' => 'event_category', 'value' => $category, 'compare' => 'LIKE'), ) ); $query1 = new WP_Query($static); $query2 = new WP_Query($repeating); //create new empty query and populate it with the other two $wp_query = new WP_Query(); $wp_query->posts = array_merge( $query1->posts, $query2->posts ); //populate post_count count for the loop to work correctly $wp_query->post_count = $query1->post_count + $query2->post_count; 

Прежде всего, все, что связано с LIKE просто не может быть быстрым. Если вы хотите быстрые запросы, избегайте LIKE .

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

Теперь почему сбою сервера трудно сказать, но большую часть времени это симптом для исчерпания памяти. Вопрос здесь в том, есть ли у mySQL нехватка памяти или на стороне PHP. В любом случае запрос на несвязанное количество результатов сделает это для вас, когда у вас будет много результатов.

Проблема заключалась в том, что первоначальный OR I реформировал усадьбу, в которой он собирал данные, и это работает мгновенно.

 $args = array( 'numberposts' => -1, 'post_type' => 'protean_event', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'calendar', 'value' => $cid, 'compare' => '='), array( 'relation' => 'OR', array( 'relation' => 'AND', array( 'key' => 'event_date', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '='), ), array( 'relation' => 'AND', array( 'key' => 'event_date', 'value' => $endQuery, 'compare' => '<=' ), array( 'key' => 'repeat_until', 'value' => $startQuery, 'compare' => '>=' ), array( 'key' => 'does_this_event_repeat', 'value' => '1', 'compare' => '>'), ) ), array( 'key' => 'event_category', 'value' => '"'.$category.'"', 'compare' => 'LIKE') ) );