Cum să numeri numărul de înregistrări găsite într-un tabel din baza de date?

8 dec. 2014, 08:44:35
Vizualizări: 27K
Voturi: 2

Sunt nou în dezvoltarea WordPress și încerc să învăț dezvoltarea de plugin-uri. Am creat un tabel personalizat din care vreau să afișez numărul de înregistrări găsite. Am încercat codul de mai jos dar acesta arată întotdeauna 1 ca rezultat, indiferent de numărul de rânduri din tabel.

//Pentru a afișa numărul de rânduri din tabel
    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 . 'Rânduri Găsite';

    }
1
Comentarii

get_var returnează deja numărul. Verifică dumping-ul variabilei $num.

Nilambar Sharma Nilambar Sharma
8 dec. 2014 13:15:10
Toate răspunsurile la întrebare 2
2

De ce nu afișezi direct $num deoarece va conține deja numărul de rânduri... Iată partea editată..

//Pentru a afișa numărul de rânduri din tabel
  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 . ' rânduri găsite';


}
8 dec. 2014 09:33:26
Comentarii

Fir vechi. Există o eroare aici. Dacă tabelul este gol, va returna '1' deoarece acel singur rând va avea valoarea 0 ca fiind numărul de înregistrări.

Steve Steve
1 apr. 2017 09:14:49

@Steve Nu este adevărat. Se ia valoarea count... nu se numără rândurile returnate.

Maxime Maxime
27 nov. 2018 00:50:18
4

METODA #1

Puteți utiliza metoda WordPress folosind clasa $wpdb:

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

Codex spune:

Deoarece această funcție utilizează funcția $wpdb->query(), toate variabilele clasei sunt setate corespunzător. Numărul de rezultate pentru o interogare 'SELECT' va fi stocat în $wpdb->num_rows.

METODA #2

De asemenea, poate fi numărat în mod PHP. Utilizați pur și simplu interogarea generică și funcția 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;

Referință: http://php.net/manual/en/function.count.php

Deși este preferata mea, dar după cum spune @MarkKaplun:

există o diferență uriașă de performanță între numărarea dimensiunii unui array în PHP și lăsarea mysql să numere rândurile pentru tine. Este puțin probabil să o observi pe date mici, dar pentru tabele mari vei observa.

De aceea, aș prefera să rămân la metoda $wpdb. <3

8 dec. 2014 08:59:39
Comentarii

mulțumesc pentru răspunsul rapid, dar am 12 rânduri într-un tabel, iar primul cod afișează 0 ca rezultat & al doilea cod, care este metoda MySQL, afișează o avertizare mysql_num_rows() așteaptă ca parametrul 1 să fie resursă, s-a dat o matrice în /home/u168837564/public_html/wp-content/plugins/DB_Tables/DB_Tables.php la linia 136

hitesh hitesh
8 dec. 2014 09:23:18

există o diferență uriașă de performanță între numărarea dimensiunii unei matrice în PHP și lăsarea mysql să numere rândurile pentru tine. Este puțin probabil să o observi pe date mici, dar pentru tabele mari vei observa.

Mark Kaplun Mark Kaplun
8 dec. 2014 09:34:46

Mulțumesc @MarkKaplun, nu știam acest lucru. Și acum am postat răspunsul meu după o anumită căutare. Am avut noroc că a fost greșit prima dată, pentru că asta m-a determinat să învăț totul. Mulțumesc mult pentru comentariul tău.

Mayeenul Islam Mayeenul Islam
8 dec. 2014 10:05:57

@MayeenulIslam, nici o problemă ;) doar ca să menționez motivul pentru care există diferența, acesta este legat de costul găsirii și transferării informației din baza de date în codul PHP. Când interoghezi doar numărul de rânduri, există mult mai puțină suprasarcină de comunicare. (și, desigur, baza de date poate avea numărul de rânduri stocat în cache ca parte din structura sa de date, ceea ce înseamnă că necesită aproape zero efort pentru a-l găsi)

Mark Kaplun Mark Kaplun
8 dec. 2014 11:14:42