Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je veux faire un GROUP BY et un COUNT.
C’est chose faite avec le code suivant :
$query = $this->select('tri_date','tri_table','tri_login') ->from(array('tri'=>'tri'), array( 'nbLines' => new Zend_Db_Expr('COUNT(*)') )) ->group('tri_date'); return $query;
Mais le COUNT(*) me retourne :
6 lorsque j’ai qu’une seul ligne
24 lorsque j’ai 4 lignes
Donc le résultat est multiplié par 6.
A noté que le la requête faire par zend est la suivante
SELECT `trace_import`.*, COUNT(*) AS `nbLines` FROM `trace_import` INNER JOIN `trace_import` AS `tr` GROUP BY `tr_date
Je pense mal utiliser le COUNT(*).
Je sollicite votre aide.
Edit Philippe, reformatté la requête pour la rendre plus lisible
Hors ligne
INNER JOIN ... ON ... <= il te manque la clause de liaison
Hors ligne
J'ai un doute sur le fait que la requête SQL corresponde au code PHP.
Cela dit, dans la requête générée, il y a un autre problème en plus de celui mentionné par mikaelkael. Théoriquement, tous les champs du select qui ne sont pas des aggrégateurs (SUM, COUNT,...) doivent être dans ton group by, sinon, la requête ne veut plus dire grand chose.
A+, Philippe
Hors ligne
Je ne vois pas ce que je dois ajouter au code.
Hors ligne
$query = $this->select() ->from('tri', array( 'tri_date', 'tri_table', 'tri_login', 'nbLines' => new Zend_Db_Expr('COUNT(1)') ) )->group('tri_date','tri_table','tri_login'); return $query;
déjà: pas count(*) qui est une monstruosité qu'on voit partout mais count(1)
ensuite les colonnes sont dans le array en 2emme argument de from et nom pas dans le sélect
pour la jointure
<?php $query = $this->select() ->from('tri', array( 'tri_date', 'tri_table', 'tri_login', 'nbLines' => new Zend_Db_Expr('COUNT(1)') ) )->group('tri_date','tri_table','tri_login') ->join('trace_import', 'trace_import.tr_id = tri.tri_id', null) ; return $query;
si tu as des colonnes de trace import à remonter il faut les placer dans un array à la place du null et les métre dans le group
A+JYT
Hors ligne
Ça marche parfaitement. Merci beaucoup.
J'ai quelques questions.
A propos du count(*), c'est ce qui est enceigné dans les universités, en tout cas la mienne, dés la 1ere année.
Je ne vois pas où ce situe la différence, à part dans la syntaxe.
Ensuite, c'est étrange de mettre les arguments dans le from().
Déjà ils sont dans le select dans une requête SQL.
Puis imagine tu veux faire un truc comme ça :
$query = $this->select('attribu1', 'attribu2') ->where('truc = ' . $truc);
Tu serra obligé de rajouter la ligne from() qui sert à rien puisque le nom de la table est déjà dans l'attribue $_name de la classe :
$query = $this->select() ->from('nom_table', array('attribu1', 'attribu2')) ->where('truc = ' . $truc);
Je trouve ce choix quelque peu étrange
En tout cas merci encore !
Hors ligne