Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je souhaiterai compter le nombre d'enregistrements d'une requête avant de faire tout traitement sur les lignes de ma requete, et sans avoir à faire deux requêtes sur ma base (un SELECT ... et un SELECT COUNT...).
Par exemple
$resultat = $db->query($ma_requete); echo(Nombre_d_enregistrement($resultat)); //Je traite resultat comme je le souhaite (fetchAll, getOne ...), sans avoir à relancer ma requete ...
Pour compter le nombre de résultats, j'avais penser utiliser la fonction suivante:
function Nombre_d_enregistrement($res) { count($resultat->fetchAll()) }
Le problème c'est que fetchAll, va faire un fetch sur toutes les lignes de mon objet résultat et du coup je ne peux pas faire :
$nbres = Nombre_d_enregistrement($resultat); while($row = $resultat->fetch()) { //traitement ligne par ligne }
Le fetch ne renvoie rien ,l'objet $resultat a déjà été "fetché" en entier avec la méthode fetchAll de ma fonction Nombre_d_enregistrement.
Je ne vois pas de solutions pour l'instant, je suis preneur de toute piste me permettant d'avancer.
D'avance, merci.
Dernière modification par pnk (11-06-2009 11:05:58)
Hors ligne
nbrRes=$row->count();
Hors ligne
A quoi correspond la variable $row dans ton $row->count();
J'ai testé avec ma variable $resultat (type Zend_Db_Statement_Pdo) sans succès.
Hors ligne
Salut,
Tu peux essayer 2 requêtes pour compter le nombre d'enregistrement :
function Nombre_d_enregistrement() { $select = $this -> select() -> from($this -> _name, 'id'); return count( $this -> fetchAll($select) ); }
Ainsi tu ne sélectionne que le champ id de ta table
Ou encore :
function Nombre_d_enregistrement() { $select = $this -> select() -> from( $this -> _name, array( 'nbRows' => 'COUNT(`id`)' ) ); $row = $this -> fetchRow($select); return $row['nbRows']; }
Il semblerais que la 2eme solution soit plus optimisée...
@++
Kaimite
Hors ligne
Pages: 1