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 :
Le container :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 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;
Et le view :Code:
1
2
3
4
5
6
7
8
9
10
11
12 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; }
Forcément, je n'arrive pas à afficher "pos"... :(Code:
1
2
3
4
5
6
7 [...] <?php foreach ($this->listeItems as $item) { ?> <td class="style15"> <?php echo $item->pos; ?></td> <?php } ?>
Par contre, dans ma page view, si je mets:
<td class="style15"> <?php echo $item->votes; ?></td>
j'obtiens bien un résultat
Pouvez-vous m'aiguiller ou me proposer une solution ?
En vous remerciant par avance.
Cdt