Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-06-2010 11:10:56

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Résultats faux avec un COUNT(*) et un GROUP BY

Bonjour,

Je veux faire un GROUP BY et un COUNT.

C’est chose faite avec le code suivant :

Code:

        $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

Code:

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

 

#2 28-06-2010 11:25:36

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Résultats faux avec un COUNT(*) et un GROUP BY

INNER JOIN ... ON ... <= il te manque la clause de liaison


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 28-06-2010 11:31:30

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Résultats faux avec un COUNT(*) et un GROUP BY

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 28-06-2010 14:18:49

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Résultats faux avec un COUNT(*) et un GROUP BY

Je ne vois pas ce que je dois ajouter au code.

Hors ligne

 

#5 28-06-2010 14:30:45

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Résultats faux avec un COUNT(*) et un GROUP BY

Code:

$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

Code:

<?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

 

#6 28-06-2010 14:52:45

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Résultats faux avec un COUNT(*) et un GROUP BY

Ç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 :

Code:

$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 :

Code:

$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

 

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