Здравствуйте!
Помогите с выбором. Есть 2 кода, которые выводят количество новых записей за выбранные дни:
1. Создает 1 постоянный запрос к БД.
$pwa = array( 'post_type' => 'post', 'date_query' => array( array( 'after' => '1 week ago' ) ), 'fields' => 'ids', 'posts_per_page' => -1, ); $pwk = new WP_Query( $pwa ); echo $pwk->post_count;
2. Этот же код тоже выводит счетчик, но запрос к БД постоянно меняется от 0 до 1. Кэширование не использую.
function pwk( $post_type = 'post' ) { global $wpdb; $posts = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_status='publish' AND post_type= %s AND post_date> %s", $post_type, date('Y-m-d H:i:s', strtotime('1 week ago')) ) ); return $posts; } echo pwk();
Отсюда вопрос, какой из способов лучше использовать и безопаснее?
Или если есть другой способ, то поделитесь пожалуйста.
Здравствуйте.
Вы установите плагин Debug Bar и посмотрите насколько большой итоговый sql? - может быть в 1м случае он тянет лишнее? Ну и сравните время выполнения каждого из вариантов.
Мне кажется что способ 2 будет логичней - т.к. вы уже на уровне sql говорите - посчитай мне кол-во. А в 1-м случае вы только выбираете id постов и только потом на php суммирует их этот класс.
Еще: что первый, что 2-й способы - всё в рамках апи вордпресс. И там и там внутри классов есть механизмы кеширования (например когда у вас на сервере стоит мемкеш)
Я бы выбрал 2-й способ. Мне кажется что если задача вернуть именно число - то лучше посчитать сразу в БД, а не тянуть массив данных одной колонки и потом на php классом прогонять.
Кто держит у себя инструменты профилирования - обычно пропускают свои запросы через нагрузочное тестирование - например 50 одновременных вызовов - и смотрят результат. Так измерения точней, чем может показать плагин Debug Bar
По безопасности - они оба безопасны. 1-й случай предусматривает выбор постов и взламывать через него некого. Второй способ вы через prepare подготавливаете - а значит что тоже безопасен.
Otshelnik-Fm сказал(а)
Здравствуйте.Вы установите плагин Debug Bar и посмотрите насколько большой итоговый sql? - может быть в 1м случае он тянет лишнее? Ну и сравните время выполнения каждого из вариантов.
Спасибо большое Otshelnik-Fm, за столько подробное описание, это то, что я и хотел узнать, Вы в одном сообщение на все мои вопросы даже ответили.