Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-04-2009 23:32:37

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

[Résolu][ZF 1.7.8]Zend_Paginator

Bonjour,

est-il possible d'utiliser pour Zend_Paginator, un objet select de cette façon ?

Code:

$select = $this->_db->select();
$select->from(new Zend_Db_Expr("SELECT `personne`.`pers_avatar`, `personne`.`pers_nom`, `techsports`.`sport_sport`,
          `profils`.`profils_type`, `clubs`.`club_nomclub`, `techdept`.`techdept_numdep`,
          `personne`.`pers_nbvideo`
          FROM
               `personne` 
          JOIN `profils` ON `personne`.`pers_id` = `profils`.`profils_id` 
          JOIN `techsports` ON `profils`.`profils_sport` = `techsports`.`sport_id` 
          JOIN `clubs` ON `profils`.`profils_club` = `clubs`.`club_id` 
          JOIN `techdept` ON `profils`.`profils_departement` = `techdept`.`techdept_id`
          WHERE `personne`.`pers_nom` LIKE '".$nom."%' 
          ORDER BY `profils_communaute` ASC, `sport_pop` ASC, `profils`.`profils_type` DESC"));
$paginator = Zend_Paginator::factory($select);

j'ai aussi essayé avec cette requête :

Code:

"SELECT `t`.* FROM SELECT `personne`.`pers_avatar`, `personne`.`pers_nom`, `techsports`.`sport_sport`, `profils`.`profils_type`, `clubs`.`club_nomclub`, `techdept`.`techdept_numdep`, `personne`.`pers_nbvideo` FROM `personne` JOIN `profils` ON `personne`.`pers_id` = `profils`.`profils_id` JOIN `techsports` ON `profils`.`profils_sport` = `techsports`.`sport_id` JOIN `clubs` ON `profils`.`profils_club` = `clubs`.`club_id` JOIN `techdept` ON `profils`.`profils_departement` = `techdept`.`techdept_id` WHERE `personne`.`pers_nom` LIKE 'l%' ORDER BY `profils_communaute` ASC, `sport_pop` ASC, `profils`.`profils_type` DESC AS `t` "

sans succès.
Je demande ça car la requête sql fonctionne parfaitement et devoir la recoder me gène un peu.
Ces requêtes fonctionnent sauf quand elles sont utilisées avec Zend_Paginator...

Dernière modification par Jean-Marc Rigade (18-04-2009 20:38:36)

Hors ligne

 

#2 18-04-2009 15:44:01

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [Résolu][ZF 1.7.8]Zend_Paginator

le seul moyen que j'avais trouvé était :

Code:

$actualites = new Actualites();
$select = ("SELECT * FROM actualites ORDER BY creer DESC");
$paginator = Zend_Paginator::factory($actualites->getAdapter()->fetchAll($select));

de plus, grace à ça j'ai qu'une requete car quand on utilise le paginator, on peu s'apercevoir qu'il en fait 2 pour le même résultat. (j'ai pas encore était plus loin pour comprendre le pourquoi !)

Hors ligne

 

#3 18-04-2009 20:38:00

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [Résolu][ZF 1.7.8]Zend_Paginator

Normalement les deux requêtes faites par le paginator son indispensables pour déterminer dans un premier temps le nombre de lignes totales, ce qui lui permet de paginer en indiquant combien de pages suivent et précèdent la page affichée...

A mon avis, dans ton cas il fait une seule requête car il n'utilise pas l'objet select mais un array qui est le résultat de la requête.
Le tableau est viable si le nombre de lignes lues est assez réduit, ce qui permet après au paginator de paginer le tableau sans faire de nouvelles lectures de base, puisque tout est chargé en mémoire...

Mais dans mon cas, comme dans beaucoup d'autres il est hors de question de tout lire, car le nombre de lignes lues peut être potentiellement de plusieurs milliers. Il faut donc lire des sous ensembles de données et passer un objet select au paginator.

En fait mon problème venait d'une connaissance insuffisante de l'objet select et surtout de l'utilisation de join avec select. Avec un peu de temps je suis arrivé à un beau select, bien dans le cadre du Zend Framework (enfin j'espère) :

Code:

$select = $this->_db->select();
         $select->from(array('pers'=>'personne'), 
                        array( 'pers_avatar',
                               'pers_nom',
                               'pers_nbvideo',
                               'pers_id'));
                       
         $select->join(array('pro'=>'profils'),'pers.pers_id = pro.profils_id','pro.profils_type');
         $select->join(array('techs'=>'techsports'),'pro.profils_sport = techs.sport_id','techs.sport_sport');
         $select->join(array('clu'=>'clubs'),'pro.profils_club = clu.club_id','clu.club_nomclub');
         $select->join(array('techd'=>'techdept'),'pro.profils_departement = techd.techdept_id','techd.techdept_numdep');
         
         $select->where(new Zend_Db_Expr('pers_nom LIKE "l%"'));

         $select->order(array('profils_communaute ASC',
                               'sport_pop ASC',
                               'profils_type DESC'));

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages