¿Cómo contar el número de registros encontrados en una tabla de base de datos?

8 dic 2014, 08:44:35
Vistas: 27K
Votos: 2

Soy nuevo en el desarrollo de WordPress y estoy tratando de aprender desarrollo de plugins. He creado una tabla personalizada de la cual quiero mostrar el número de registros encontrados. He intentado el siguiente código pero siempre muestra 1 como resultado independientemente del número de filas en la tabla.

//Para mostrar el número de filas en la tabla
    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 . 'Filas Encontradas';


    }
1
Comentarios

get_var ya retorna el conteo. Verifica haciendo un dump de la variable $num.

Nilambar Sharma Nilambar Sharma
8 dic 2014 13:15:10
Todas las respuestas a la pregunta 2
2

¿Por qué no muestras directamente el $num ya que contendrá el conteo de filas?... Aquí está la parte editada..

//Para mostrar el número de filas en la tabla
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 . ' Filas Encontradas';

}
8 dic 2014 09:33:26
Comentarios

Hilo antiguo. Hay un error en esto. Si es una tabla vacía, devolverá '1' ya que esa única fila tendrá el valor 0 como conteo.

Steve Steve
1 abr 2017 09:14:49

@Steve Esto no es cierto. Está tomando el valor del conteo... no contando el número de filas devueltas.

Maxime Maxime
27 nov 2018 00:50:18
4

MÉTODO #1

Puedes usar la forma de WordPress utilizando la clase $wpdb:

<?php
global $wpdb;
$table_name = $wpdb->prefix . 'mydata';
$my_query = $wpdb->get_results( "SELECT * FROM $table_name" );
echo $my_query->num_rows;

El codex dice:

Dado que esta función utiliza la función $wpdb->query(), todas las variables de la clase se configuran correctamente. El conteo de resultados para una consulta 'SELECT' se almacenará en $wpdb->num_rows.

MÉTODO #2

También se puede contar mediante PHP. Solo usa tu consulta genérica y utiliza la función count() de PHP.

<?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;

Referencia: http://php.net/manual/es/function.count.php

Aunque es mi favorito, como dice @MarkKaplun:

hay una gran diferencia de rendimiento entre contar el tamaño de un array en PHP y dejar que mysql cuente las filas por ti. Es poco probable que lo notes en datos pequeños, pero para tablas grandes sí lo notarás.

Así que yo también preferiría quedarme con el método $wpdb. <3

8 dic 2014 08:59:39
Comentarios

,gracias por la rápida respuesta, pero tengo 12 filas en una tabla pero el primer código muestra 0 como resultado y el segundo código que es la forma MySQL muestra una advertencia: mysql_num_rows() expects parameter 1 to be resource, array given in /home/u168837564/public_html/wp-content/plugins/DB_Tables/DB_Tables.php on line 136

hitesh hitesh
8 dic 2014 09:23:18

hay una gran diferencia de rendimiento entre contar el tamaño de un array en PHP y dejar que MySQL cuente las filas por ti. Es poco probable que lo notes en datos pequeños, pero para tablas grandes sí lo harás.

Mark Kaplun Mark Kaplun
8 dic 2014 09:34:46

Gracias @MarkKaplun, no estaba al tanto de eso. Y ahora publiqué mi respuesta después de investigar un poco. Tuve suerte de que estuviera mal la primera vez, porque eso me motivó a aprender todo. Muchas gracias por tu comentario.

Mayeenul Islam Mayeenul Islam
8 dic 2014 10:05:57

@MayeenulIslam, np ;) solo para anotar la razón por la que hay una diferencia, está relacionada con el costo de encontrar y transferir la información desde la base de datos al código PHP. Cuando consultas solo el número de filas, hay mucha menos sobrecarga de comunicación. (y por supuesto, la base de datos podría tener el número de filas en caché como parte de su estructura de datos, por lo que requiere casi cero trabajo encontrarlo)

Mark Kaplun Mark Kaplun
8 dic 2014 11:14:42