Домой WordPress WordPress: Вопросы и ответы Счетчик новых записей за N-дней. Какой способ лучше?
3 ответ(ов) в теме
Tesessssss
не в сети 3 недели
На сайте с 05.05.2014
Участник
Тем 4
Сообщения 11
1
12:44

Здравствуйте!
Помогите с выбором. Есть 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();

Отсюда вопрос, какой из способов лучше использовать и безопаснее?
Или если есть другой способ, то поделитесь пожалуйста.

Редакции сообщения
21.01.2019 12:45TesessssssПричина: не указано
21.01.2019 12:45TesessssssПричина: не указано
0
Otshelnik-Fm
не в сети 7 часов
На сайте с 27.01.2013
Модератор
Тем 28
Сообщения 13239
2
13:11

Здравствуйте.

Вы установите плагин Debug Bar и посмотрите насколько большой итоговый sql? - может быть в 1м случае он тянет лишнее? Ну и сравните время выполнения каждого из вариантов.

Мне кажется что способ 2 будет логичней - т.к. вы уже на уровне sql говорите - посчитай мне кол-во. А в 1-м случае вы только выбираете id постов и только потом на php суммирует их этот класс.

Еще: что первый, что 2-й способы - всё в рамках апи вордпресс. И там и там внутри классов есть механизмы кеширования (например когда у вас на сервере стоит мемкеш)

Я бы выбрал 2-й способ. Мне кажется что если задача вернуть именно число - то лучше посчитать сразу в БД, а не тянуть массив данных одной колонки и потом на php классом прогонять.

Кто держит у себя инструменты профилирования - обычно пропускают свои запросы через нагрузочное тестирование - например 50 одновременных вызовов - и смотрят результат. Так измерения точней, чем может показать плагин Debug Bar

По безопасности - они оба безопасны. 1-й случай предусматривает выбор постов и взламывать через него некого. Второй способ вы через prepare подготавливаете - а значит что тоже безопасен.

2
Tesessssss
не в сети 3 недели
На сайте с 05.05.2014
Участник
Тем 4
Сообщения 11
3
14:55

Otshelnik-Fm сказал(а)
Здравствуйте.

Вы установите плагин Debug Bar и посмотрите насколько большой итоговый sql? - может быть в 1м случае он тянет лишнее? Ну и сравните время выполнения каждого из вариантов.

Спасибо большое Otshelnik-Fm, за столько подробное описание, это то, что я и хотел узнать, Вы в одном сообщение на все мои вопросы даже ответили.

0
Вы не имеете права на публикацию сообщений в этой теме