Как посчитать количество записей в таблице базы данных?
Я новичок в разработке WordPress и пытаюсь изучать разработку плагинов. Я создал пользовательскую таблицу, из которой хочу показать количество найденных записей. Я пробовал код ниже, но он всегда показывает 1 в качестве результата, независимо от количества строк в таблице.
//Показать количество строк в таблице
function DB_Tables_Rows()
{
global $wpdb;
$table_name = $wpdb->prefix . 'mydata';
$count_query = "select count(*) from $table_name";
$num = $wpdb->get_var($count_query);
$num = $wpdb->num_rows;
echo $wpdb->num_rows . 'Строк найдено';
}

Почему бы не вывести напрямую переменную $num, так как она уже содержит количество строк... Вот измененная часть..
//Показать количество строк в таблице
function DB_Tables_Rows()
{
global $wpdb;
$table_name = $wpdb->prefix . 'mydata';
$count_query = "select count(*) from $table_name";
$num = $wpdb->get_var($count_query);
echo $num . ' строк найдено';
}

Старая тема. Здесь есть недочёт. Если таблица пустая, вернётся '1', так как единственная строка будет иметь значение 0, которое является результатом подсчёта.

СПОСОБ #1
Вы можете использовать стандартный WordPress-метод с помощью класса $wpdb
:
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'mydata';
$my_query = $wpdb->get_results( "SELECT * FROM $table_name" );
echo $my_query->num_rows;
Согласно документации Codex:
Поскольку эта функция использует
$wpdb->query()
, все переменные класса устанавливаются корректно. Количество результатов для запроса 'SELECT
' будет сохранено в$wpdb->num_rows
.
СПОСОБ #2
Также можно подсчитать с помощью PHP. Просто используйте ваш запрос и функцию PHP count()
.
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'mydata';
$my_query = $wpdb->get_results( "SELECT * FROM $table_name" );
$num_rows = count( $my_query ); //PHP-функция count()
echo $num_rows;
Справка: http://php.net/manual/en/function.count.php
Хотя это мой любимый способ, но, как говорит @MarkKaplun:
Существует огромная разница в производительности между подсчетом размера массива в PHP и тем, когда MySQL подсчитывает строки за вас. На небольших данных разница незаметна, но для больших таблиц она будет существенной.
Поэтому я тоже рекомендую использовать способ с $wpdb
. <3

Спасибо за быстрый ответ, но у меня 12 строк в таблице, а первый код показывает 0 как результат, а второй код (MySQL способ) выдает предупреждение: mysql_num_rows() ожидает параметр 1 типа resource, передан массив в /home/u168837564/public_html/wp-content/plugins/DB_Tables/DB_Tables.php на строке 136

Существует огромная разница в производительности между подсчетом размера массива в PHP и тем, чтобы MySQL сам подсчитал строки. На небольших данных это незаметно, но для больших таблиц разница существенна.

Спасибо @MarkKaplun, я не знал об этом. Теперь я опубликовал свой ответ после некоторых поисков. Мне повезло, что в первый раз он был неверным, потому что это заставило меня изучить вопрос глубже. Большое спасибо за ваш комментарий.

@MayeenulIslam, без проблем ;) просто чтобы записать причину различия, это связано со стоимостью поиска и передачи информации из БД в PHP-код. Когда вы запрашиваете только количество строк, накладные расходы на передачу данных значительно меньше. (и, конечно же, БД может иметь количество строк в кэше как часть своей структуры данных, поэтому для их поиска требуется практически нулевая работа)
