Как посчитать количество записей в таблице базы данных?

8 дек. 2014 г., 08:44:35
Просмотры: 27K
Голосов: 2

Я новичок в разработке 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 . 'Строк найдено';

    }
1
Комментарии

get_var уже возвращает количество. Проверьте дамп переменной $num.

Nilambar Sharma Nilambar Sharma
8 дек. 2014 г. 13:15:10
Все ответы на вопрос 2
2

Почему бы не вывести напрямую переменную $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 . ' строк найдено';


}
8 дек. 2014 г. 09:33:26
Комментарии

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

Steve Steve
1 апр. 2017 г. 09:14:49

@Steve Это неверно. Здесь берётся значение count... а не подсчитывается количество возвращённых строк.

Maxime Maxime
27 нояб. 2018 г. 00:50:18
4

СПОСОБ #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

8 дек. 2014 г. 08:59:39
Комментарии

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

hitesh hitesh
8 дек. 2014 г. 09:23:18

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

Mark Kaplun Mark Kaplun
8 дек. 2014 г. 09:34:46

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

Mayeenul Islam Mayeenul Islam
8 дек. 2014 г. 10:05:57

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

Mark Kaplun Mark Kaplun
8 дек. 2014 г. 11:14:42