Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-10-2008 10:46:02

Fly706
Membre
Date d'inscription: 15-10-2008
Messages: 20

requete avec un count(*)

Bonjour

j'ai un probleme avec une requete...

il me met:

{"error":"erreur durant la construction du contr\u00f4leur","str_error":"\nException : Zend_Db_Statement_Exception

\nMessage : SQLSTATE[42000]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX

(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause\n"}

voici ma requête:

Code:

$select = $this->_db->select()
        ->from (array('t' => $this->_name), array('total' => 'COUNT(*)'))                
        ->join(array('t1' => "table1"), "t1.nom = t.nom", array())                                                
        ->join(array('t2' => "table2"), "t2.id = t1.id", array())
          ->join(array('t3' => "table3"), "t2.identifiant = t3.identifiant", array())                  
        ->where("t2.nom LIKE '{$name}'")        
        ->where("t1.adresse LIKE '{$address}'")
        ->where('t.date> ?', $dateDebut)
        ->where('t.date< ?', $dateFin)
        ->order('t.id ASC')

quand je fais cette même requête en sql, j'ai n'ai pas besoin de group by et il m'affiche quand même le nombre de tuples...  :s


Quelqu'un saurait-il me dire ce qui va pas dans ma requête?

merci d'avance

Hors ligne

 

#2 21-10-2008 15:11:26

zudre
Membre
Date d'inscription: 10-05-2007
Messages: 21

Re: requete avec un count(*)

Quand j'ai des requêtes à faire avec Zend_Db, je met toujours les expressions SQL comme celle-ci


Code:

$select = $this->_db->select()
        ->from (array('t' => $this->_name), array('total' => new Zend_Db_Expr('COUNT(*)')))                
        ->join(array('t1' => "table1"), "t1.nom = t.nom", array())                                                
        ->join(array('t2' => "table2"), "t2.id = t1.id", array())
          ->join(array('t3' => "table3"), "t2.identifiant = t3.identifiant", array())                  
        ->where("t2.nom LIKE '{$name}'")        
        ->where("t1.adresse LIKE '{$address}'")
        ->where('t.date> ?', $dateDebut)
        ->where('t.date< ?', $dateFin)
        ->order('t.id ASC')

Pour tes like, tu peux aussi utiliser:

->where("t1.adresse LIKE '?'", $address)

Pour ce qui est de ton message d'erreur, tu dois faire un group sur une de tes colonnes que tu cherches.  Sinon, SQL ne pourra pas faire le total.

Hors ligne

 

#3 22-10-2008 11:07:39

Fly706
Membre
Date d'inscription: 15-10-2008
Messages: 20

Re: requete avec un count(*)

zudre a écrit:

Pour ce qui est de ton message d'erreur, tu dois faire un group sur une de tes colonnes que tu cherches.  Sinon, SQL ne pourra pas faire le total.

Je ne comprends pas... 
quand je fais ma requete sql:

Code:

select count(*) as total
from table t, table1 t1, table2 t2, table3 t3
where t1.nom = t.nom
and t2.id = t1.id
and t2.identifiant = t3.identifiant
and t2.nom like $name
and t1.adresse like $address
and t.date > $dateDebut
and t.date < $dateFin

elle fonctionne parfaitement et me renvoie le nbres d'enregistrement et je n'ai pas de clause group by...


donc il faut que j'ajoute un order dans ma requete?
car même en mettant:

array('total' => new Zend_Db_Expr('COUNT(*)'))

il me met la même erreur...


merci de votre aide

Hors ligne

 

#4 22-10-2008 11:39:08

Guillhomme
Membre
Date d'inscription: 09-10-2008
Messages: 102

Re: requete avec un count(*)

Essaye :

Code:

echo $select;

Grace à la méthode __tostring(), ca va te retourner ta requete au format SQL, et ecris nous le resultats ici.

Hors ligne

 

#5 22-10-2008 13:16:34

Fly706
Membre
Date d'inscription: 15-10-2008
Messages: 20

Re: requete avec un count(*)

mon echo $select renvoie bien la requête...

mais il dit qu'il manque un group by alors qu'il n'en faut pas... il me semble en tout cas
car avec un group by, il ne saurait jamais compter tout les enregistements de la table...

car quand j'ajoute   ->group('t.id');

il réenvoie: 1  pour chaque ligne  (ce qui est normal)

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