Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je tenais à partager avec vous un problème que je rencontre.
Pour faire simple, mon but est, à partir de plusieurs tables, monter un classement (1er, 2eme, 3eme...) en fonction du nombre de votes réalisés par des utilisateurs ce qui se traduirait par cette requête SQL :
SET @var := 0;
SELECT @var := @var +1 AS pos, votes,pseudo FROM (
SELECT count(note) as votes,pseudo from user_votes group by pseudo order by votes DESC) AS classement;
Seulement voilà, je souhaiterais "construire" cette requête avec l'outil Zend_Db_Select et j'éprouve quelques difficultés, notamment dans la déclaration de ma variable. Voilà où j'en suis :
public function getNewClassement() { $this ->_db->setFetchMode(Zend_Db::FETCH_OBJ); $first = $this ->_db->select() ->from ( 'user_votes' , array ( 'votes' => 'count(note)' , 'pseudo' )) ->group ( 'pseudo' ) ->order( 'votes DESC' ); $second = $this ->_db->select( array ( 'pos' => '@nr := @nr +1' )) ->from ( $first , array ( 'moyenne' , 'votes' , 'pseudo' )); return $second ; } |
Le container :
public function indexAction() { $dbUser = new Db_User(); $selectClassement = $dbUser ->getNewClassement(); $page = Zend_Paginator::factory( $selectClassement ); $page ->setPageRange(20); $page ->setCurrentPageNumber( $this ->_getParam( 'page' , 1)); $page ->setItemCountPerPage( $this ->_getParam( 'par' , 10)); $this ->view->listeItems = $page ; } |
Et le view :
[...] <?php foreach ($this->listeItems as $item) { ?> <td class="style15"> <?php echo $item->pos; ?></td> <?php } ?>
Forcément, je n'arrive pas à afficher "pos"...
Pouvez-vous m'aiguiller ou me proposer une solution ?
En vous remerciant par avance.
Cdt
Dernière modification par Chti_Pingu (20-07-2012 00:25:14)
Hors ligne
bonjour,
apparemment au niveau de votre modèle les résultats de votre requête ne sont à priori pas parcouru car absence d'une méthode comme fetchAll().
Hors ligne
Bonjour,
Si si, il y a un fetch objet (comme je travaille en objet) :
$this->_db->setFetchMode(Zend_Db::FETCH_OBJ);
Dans ma page view, si je mets:
<td class="style15"> <?php echo $item->votes; ?></td>
j'obtiens bien un résultat. Ce qui n'est pas le cas avec "pos".
Hors ligne
Bonjour
une solution mettre un compteur dans votre boucle d'affichage et oublier votre seconde requette
<?php
$ctp=1;
foreach ($this->listeItems as $item) {
?>
<td class="style15"> <?php echo $cpt++ ?></td>
<?php } ?>
Hors ligne