Come contare il numero di record trovati in una tabella del database?

8 dic 2014, 08:44:35
Visualizzazioni: 27K
Voti: 2

Sono nuovo nello sviluppo WordPress e sto cercando di imparare lo sviluppo di plugin. Ho creato una tabella personalizzata dalla quale voglio mostrare il numero di record trovati. Ho provato il codice seguente ma mostra sempre 1 come risultato indipendentemente dal numero di righe nella tabella.

//Per mostrare il numero di righe nella tabella
    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 . 'Righe Trovate';


    }
1
Commenti

get_var restituisce già il conteggio. Controlla il dump della variabile $num.

Nilambar Sharma Nilambar Sharma
8 dic 2014 13:15:10
Tutte le risposte alla domanda 2
2

Perché non mostri direttamente la variabile $num che già contiene il conteggio delle righe... Ecco la parte modificata..

// Per mostrare il numero di righe nella tabella
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 . ' righe trovate';


}
8 dic 2014 09:33:26
Commenti

Vecchio thread. C'è un difetto in questo. Se la tabella è vuota, restituirà '1' perché quell'unica riga avrà il valore 0 come conteggio.

Steve Steve
1 apr 2017 09:14:49

@Steve Non è vero. Sta prendendo il valore del conteggio... non conta il numero di righe restituite.

Maxime Maxime
27 nov 2018 00:50:18
4

METODO #1

Puoi utilizzare il metodo WordPress usando la classe $wpdb:

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

Il codex afferma:

Poiché questa funzione utilizza la funzione $wpdb->query() tutte le variabili della classe sono impostate correttamente. Il conteggio dei risultati per una query 'SELECT' sarà memorizzato in $wpdb->num_rows.

METODO #2

Puoi anche contare utilizzando il metodo PHP. Basta usare la tua query generica e utilizzare la funzione 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;

Riferimento: http://php.net/manual/en/function.count.php

Anche se è il mio preferito, come dice @MarkKaplun:

c'è un'enorme differenza di prestazioni tra contare la dimensione di un array in PHP e far contare le righe a mysql. È improbabile che tu lo noti su piccoli dati, ma per tabelle grandi sì.

Quindi preferisco anche io attenermi al metodo $wpdb. <3

8 dic 2014 08:59:39
Commenti

,grazie per la rapida risposta ma ho 12 righe in una tabella ma il primo codice mostra 0 come risultato & il secondo codice che è il modo MySQL mostra un avviso 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

c'è una grande differenza di performance tra contare la dimensione di un array in PHP, e far contare le righe a mysql per te. È improbabile che tu lo noti su dati piccoli, ma per tabelle grandi lo noterai.

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

Grazie @MarkKaplun non ne ero a conoscenza. E ora ho pubblicato la mia risposta dopo alcune ricerche. Fortuna che la prima volta fosse sbagliato, perché questo mi ha spinto ad imparare tutto. Grazie mille per il tuo commento.

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

@MayeenulIslam, np ;) per scrivere semplicemente il motivo della differenza, è legato al costo di ricerca e trasferimento delle informazioni dal database al codice PHP. Quando esegui una query solo per il numero di righe c'è un overhead di comunicazione molto minore. (e ovviamente il database potrebbe avere il numero di righe già memorizzato nella cache come parte della sua struttura dati e quindi richiede quasi zero lavoro per trovarlo)

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