Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
$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
Quand j'ai des requêtes à faire avec Zend_Db, je met toujours les expressions SQL comme celle-ci
$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
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:
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
Essaye :
echo $select;
Grace à la méthode __tostring(), ca va te retourner ta requete au format SQL, et ecris nous le resultats ici.
Hors ligne
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